Linux

linux:檢測外部鍵盤是否插入筆記型電腦

  • March 8, 2016

我有一台執行 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.

因此,我們將分別使用0e8f00a4作為供應商和產品 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請在腳本中使用。它當然應該是可執行的。如果您嘗試直接執行命令(即不使用腳本),請使用所述命令的絕對路徑。

祝你好運。

引用自:https://unix.stackexchange.com/questions/268171