USBキーボードをラップトップに接続することがよくありますが、接続するとデフォルトの繰り返し速度は望みどおりに設定されません。udev
ルールを追加してスクリプトを使用して変更してみました。
`ACTION=="add", ATTRS{name}=="Dell Dell Multimedia Pro Keyboard", RUN+="set-keyboard.sh"`
set-keyboard.sh
スクリプトで呼び出す
xset -display :0 r rate 500 50; xset -display :0 b off
問題は、これはUSBキーボードの繰り返し速度とビープ音が設定されるのではなく、ラップトップ内蔵キーボードの繰り返し速度とビープ音が設定されることです。 (つまり、xset q
内蔵キーボードで入力すると正しい設定が表示されますが、xset q
USBキーボードで入力するとまだ間違った速度に設定されています。)
どのキーボードを設定するかを知る方法はありますかxset
?それともこの問題を解決する別の方法がありますか?
答え1
もう少し探索したところで見つかったhttps://bugzilla.redhat.com/show_bug.cgi?id=601853問題は、udevの実行後にxorgがキーボードの速度をリセットすることです。したがって、私のudevスクリプトが確実に実行されていても、そのタスクはxorgによってすぐにキャンセルされます。
ただし、そのページには修正もあります。 optionsでstartxを実行すると、startx -- -ardelay 500 -arinterval 20
新しいキーボードが接続されていても設定が保持されます。
答え2
このコマンドを試して、USBキーボードのudev IDを確認できます。次のコマンドを実行してキーボードを接続します。
$ udevadm monitor --udev --subsystem-match=usb
例 - モニター
私は古いSun Microsystems USBキーボードを持っています。プラグを抜いて再接続すると、次のudevメッセージが表示されます。
$ udevadm monitor --udev --subsystem-match=usb
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
UDEV [1375655040.466080] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV [1375655040.557791] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
UDEV [1375655044.586242] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
UDEV [1375655044.589087] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV [1375655049.880514] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0 (usb)
UDEV [1375655049.905175] remove /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2 (usb)
したがって、ルールに入れることができるudev IDは、上記の出力のこの部分を利用します/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
。
はい - エクスポート
udev DB全体をエクスポートして手動でスキャンすることもできます。
$ udevadm info --export-db
...
P: /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
N: bus/usb/002/009
S: char/189:136
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
E: SUBSYSTEM=usb
E: DEVNAME=bus/usb/002/009
E: ID_VENDOR=0430
E: ID_VENDOR_ENC=0430
E: ID_VENDOR_ID=0430
E: ID_MODEL=0005
E: ID_MODEL_ENC=0005
E: ID_MODEL_ID=0005
E: ID_REVISION=0102
E: ID_SERIAL=0430_0005
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030101:
E: MAJOR=189
E: MINOR=136
E: DEVTYPE=usb_device
E: DRIVER=usb
E: DEVICE=/proc/bus/usb/002/009
E: PRODUCT=430/5/102
E: TYPE=0/0/0
E: BUSNUM=002
E: DEVNUM=009
E: DEVLINKS=/dev/char/189:136
...
そして、udevルールで上記の出力の他のユニークな機能を活用してください。
引用する
答え3
この問題を解決するために作成したhttps://github.com/SFTtech/xautocfg。
新しいキーボードが接続されると、Xサーバーからイベントを受け取ります。その後、キーの繰り返し速度や遅延設定などの設定をキーボードに適用できます。
root権限は必要なく、起動オプションを編集し-ardelay 200 -arinterval 20
たり、ハッキングされたudevルールを使用する必要もありません。xautocfg
ユーザー(好ましくはシステムユーザーとして提供)で実行し、デバイス構成を更新します。
答え4
だから1年間のオンライン検索の最後についに今日働くようになりました。
源泉:https://newbedev.com/udev-rule-to-auto-load-keyboard-layout-when-usb-keyboard-plugged-in
@TomYanがすでに述べたように、xset
これはX11プログラムです。したがってDISPLAY
、env変数をXAUTHORITY
ハードコードする必要があります。
デフォルトでは、回避策は短い遅延時間を置いてバックグラウンドでスクリプトを実行することです。したがって、udevはxsetキーボードの前にキーボードを有効にできます。上記のソリューションでは、udevはバックグラウンドで2番目のスクリプトを呼び出すスクリプトを呼び出し、xset
実際には単一のスクリプトに短縮できます。
Keyboard.sh設定
#!/usr/bin/env bash
(
sleep 1
DISPLAY=":0.0"
XAUTHORITY="/home/your-profile/.Xauthority"
export DISPLAY XAUTHORITY
xset r rate 250 50
) &