tl;dr
pcscdがうまくデバイスを掴めないとYubikeyをGPGが認識できないsystemctl status pcscdで様子を見ようlsusbとlsofでUSBデバイスを使用中のプロセスを特定せよsnapなどで起動したyubioath-desktopがUSBデバイスを奪っていることがある
あらすじ
gpg --card-statusしてもYubikeyが認識されない。
% gpg --card-status
gpg: selecting card failed: そのようなデバイスはありません
gpg: OpenPGPカードが利用できません: そのようなデバイスはありません
pcscd不調
Linuxのサービスとしてはpcscdがこの手のスマートカードのハンドリングを担っている。systemctlを利用してスマートカードが認識されているか確認する:
% systemctl status pcscd.service ● pcscd.service - PC/SC Smart Card Daemon Loaded: loaded (/usr/lib/systemd/system/pcscd.service; indirect; preset: disabled) Active: active (running) since Tue 2025-09-02 20:31:30 JST; 18h ago Invocation: 853067c0c5f1429d98242bce729e2b7e TriggeredBy: ● pcscd.socket Docs: man:pcscd(8) Main PID: 5429 (pcscd) Tasks: 11 (limit: 76368) CPU: 339ms CGroup: /system.slice/pcscd.service └─5429 /usr/sbin/pcscd --foreground 9月 03 14:52:18 localhost.localdomain pcscd[5429]: 99999999 ../src/ccid_usb.c:740:OpenUSBByName() Can't claim interface 1/22: LIBUSB_ERROR_BUSY 9月 03 14:52:18 localhost.localdomain pcscd[5429]: 00000295 ../src/ifdhandler.c:139:CreateChannelByNameOrChannel() failed 9月 03 14:52:18 localhost.localdomain pcscd[5429]: 00000006 ../src/readerfactory.c:1144:RFInitializeReader() Open Port 0x200000 Failed (usb:1050/0407:libudev:2:/dev/bus/us> 9月 03 14:52:18 localhost.localdomain pcscd[5429]: 00000003 ../src/readerfactory.c:371:RFAddReader() Yubico YubiKey OTP+FIDO+CCID init failed. 9月 03 14:52:18 localhost.localdomain pcscd[5429]: 00000061 ../src/hotplug_libudev.c:527:HPAddDevice() Failed adding USB device: Yubico YubiKey OTP+FIDO+CCID 9月 03 14:53:12 localhost.localdomain pcscd[5429]: 53225473 ../src/ccid_usb.c:740:OpenUSBByName() Can't claim interface 1/23: LIBUSB_ERROR_BUSY 9月 03 14:53:12 localhost.localdomain pcscd[5429]: 00000273 ../src/ifdhandler.c:139:CreateChannelByNameOrChannel() failed 9月 03 14:53:12 localhost.localdomain pcscd[5429]: 00000004 ../src/readerfactory.c:1144:RFInitializeReader() Open Port 0x200000 Failed (usb:1050/0407:libudev:2:/dev/bus/us> 9月 03 14:53:12 localhost.localdomain pcscd[5429]: 00000002 ../src/readerfactory.c:371:RFAddReader() Yubico YubiKey OTP+FIDO+CCID init failed. 9月 03 14:53:12 localhost.localdomain pcscd[5429]: 00000059 ../src/hotplug_libudev.c:527:HPAddDevice() Failed adding USB device: Yubico YubiKey OTP+FIDO+CCID
Can't claim interface 1/22: LIBUSB_ERROR_BUSYとある。このエラーはlibusbというUSBを扱うライブラリが、USBデバイスがビジーでデバイスを確保できなかったときに発生する。つまり、他のプロセスがこのデバイスを触ってるから利用できないよ、ということ。
デバイス探し
USBデバイスをどのプロセスが利用しているかを知るために、まず バスIDとデバイスIDを知る必要がある。USBでは個々のデバイスはバスIDとデバイスIDによって識別されるためだ。lsusbを実行するとこれらを得られる:
% lsusb ... Bus 001 Device 020: ID 0499:170a Yamaha Corp. Steinberg UR12 ... Bus 001 Device 024: ID 1050:0407 Yubico.com Yubikey 4/5 OTP+U2F+CCID ...
すると、突き刺しているYubikeyがこのマシンではバスIDが001、デバイスIDが024であることが分かる。認識はされているが利用できていないということだ。
プロセス探し
Linuxにおいてはなんでもファイルなので、USBデバイスも実態はファイルとして扱われている。これは/dev/bus/usb/<bus>/<dev>に用意されている。そしてファイルの利用状況はlsofコマンドで把握できるため、USBデバイスの利用状況も知ることができる:
% sudo lsof /dev/bus/usb/001/024 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pcscd 4062 root 13u CHR 189,23 0t0 1935 /dev/bus/usb/001/024
一見pcscdが掴んでいるように見える。systemctlを利用してpcscdを終了させてみる:
% sudo systemctl stop pcscd
しかし再度lsofしても結果は同じだった。
偽物のpcscdがいる
btopコマンドなどで調査したところ、この4062番のpcscdはsnapでインストールされたyubioath-desktopのものだった。これが勝手に起動してYubikeyへのアクセスを独占し、本来のpcscdによるアクセスを妨げていたのだ。
このsnapは今は利用していないので止めてもかまわない。そこで、snapを利用してyubioath-desktopを停止させ、無効化した:
% snap stop yubioath-desktop.pcscd
Stopped.
% snap disable yubioath-desktop
yubioath-desktop disabled
pcscd再起動
最後にsystemctlでpcscdを再起動する:
% sudo systemctl start pcscd % sudo systemctl status pcscd.service ● pcscd.service - PC/SC Smart Card Daemon Loaded: loaded (/usr/lib/systemd/system/pcscd.service; indirect; preset: disabled) Active: active (running) since Wed 2025-09-03 15:10:16 JST; 8s ago Invocation: 70cacd01984d46419632f3a45a7d6a68 TriggeredBy: ● pcscd.socket Docs: man:pcscd(8) Main PID: 362586 (pcscd) Tasks: 5 (limit: 76368) CPU: 138ms CGroup: /system.slice/pcscd.service └─362586 /usr/sbin/pcscd --foreground 9月 03 15:10:16 localhost.localdomain systemd[1]: Started PC/SC Smart Card Daemon.
問題なく起動できている。
gpgテスト
最後にgpgを使って確認したところ正常に認識していた。
% gpg --card-status Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00 Application ID ...: *** Application type .: OpenPGP Version ..........: 3.4 Manufacturer .....: Yubico Serial number ....: *** Name of cardholder: [未設定] Language prefs ...: [未設定] Salutation .......: URL of public key : [未設定] Login data .......: [未設定] Signature PIN ....: 強制なし Key attributes ...: ed25519 cv25519 ed25519 Max. PIN lengths .: 127 127 127 PIN retry counter : 3 0 3 Signature counter : 205 KDF setting ......: off UIF setting ......: Sign=off Decrypt=off Auth=off Signature key ....: **** **** **** created ....: 2024-10-13 14:53:10 Encryption key....: **** **** **** created ....: 2024-10-13 14:50:59 Authentication key: **** **** **** created ....: 2024-10-13 14:53:10 General key info..: sub ed25519/**** 2024-10-13 Windymelt <windymelt@3qe.us> sec# ed25519/**** **** **** 作成: 2022-10-02 有効期限: 無期限 ssb> ed25519/**** **** **** 作成: 2024-10-13 有効期限: 2029-10-12 カード番号: **** **** ssb> cv25519/**** **** **** 作成: 2024-10-13 有効期限: 2029-10-12 カード番号: **** **** ssb> ed25519/**** **** **** 作成: 2022-10-02 有効期限: 2023-10-02 カード番号: **** **** ssb> cv25519/**** **** **** 作成: 2022-10-02 有効期限: 2023-10-02 カード番号: **** ****