linux:檢測外部鍵盤是否插入筆記型電腦
我有一台執行 Ubuntu Virtualbox 的 OSX 筆記型電腦,我可以通過筆記型電腦鍵盤或在辦公室插入的外部 USB 鍵盤與它進行互動。
有沒有我可以執行的腳本來檢測是否插入了外部鍵盤,以便 Ubuntu Virtualbox 中的鍵盤映射相應地改變?
我目前手動執行執行此命令的“mac”或“key”:
setxkbmap -layout gb
或者
xmodmap .Xmodmap
我想在插入或拔出鍵盤時自動執行相同的操作。有任何想法嗎?
udev
您可以為此使用-rule。在我的範例中,我為無線滑鼠使用 USB 加密狗,您必須進行相應調整:1. 獲取標識符
為了給設備製定唯一的規則,我們需要正確地辨識它。
udevadm
為此使用 的輸出(您的 USB 鍵盤應顯示在 中/dev/usb/<device>
。將其插入並拔出以查看此設備(dis)是否出現)。供應商和設備 ID 應該足夠唯一,但匹配越多越好。udeadm info -a -n /dev/usb/hiddev0 | grep 'idVendor\|idProduct' ATTRS{idVendor}=="0e8f" ATTRS{idProduct}=="00a4" ATTRS{idVendor}=="1d6b" ATTRS{idProduct}=="0001"
注意與 at ID 的輸出匹配的兩個值
lsusb
(要知道這是哪個設備,可以測試lsubs
有無鍵盤的差異,或者看看是否可以匹配輸出中的名稱)lsusb Bus 005 Device 004: ID 0e8f:00a4 GreenAsia Inc.
因此,我們將分別使用
0e8f
和00a4
作為供應商和產品 ID。2. 創建規則
規則本身只是列出要做什麼。將其保存
/etc/udev/rules.d/
為例如keyboard.rules
(請注意,.rules
後綴是強制性的)。該文件將匹配 (==
) 一些屬性、操作並執行我們的腳本:ACTION=="add", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="00a4", RUN+="/full/path/to/script.sh"
您可能會遇到該
ACTION=="remove"
部分的問題,請閱讀此。問題是某些屬性在刪除時被刪除,因此udev
無法再將它們與您的刪除規則匹配。就我而言,我使用
udeadm monitor --environemnt
並拔掉了設備。我選擇了ID_MODEL_ID=00a4
並將其用作唯一的要求(您可能需要在此處進行一些試驗和錯誤以獲得良好的匹配,但是對於僅更改鍵映射的情況,單個匹配會節省)。請注意,刪除規則需要
ENV
而不是ATTRS
(AFAIKENV
也適用於外掛規則,但ATTRS
刪除失敗)ACTION=="remove", ENV{ID_MODEL_ID}=="00a4", RUN+="/path/to/removal_script.sh"
添加和刪除規則可以是一個文件,每個操作一行。
3.腳本
該腳本將始終由 執行
root
,因此請確保 a)它root
只能由(出於安全原因)寫入 b)如果您的命令需要由使用者執行,sudo -u user1 command
請在腳本中使用。它當然應該是可執行的。如果您嘗試直接執行命令(即不使用腳本),請使用所述命令的絕對路徑。祝你好運。