Linux
禁用鍵盤,但仍允許從中讀取
我有一個 USB 數字鍵盤,我想用它來控制在後台作為守護程序執行的特定應用程序。守護程序是用 Python 編寫的,我目前正在使用
python-evdev
它讀取輸入,效果很好。但是,我在鍵盤上鍵入的所有內容仍然正常處理,這意味著按鍵也插入到任何處理鍵盤輸入的應用程序中(包括電腦啟動時顯示的登錄提示)。這有點煩人。
有沒有辦法禁用鍵盤事件的“正常”處理,只允許手動讀取鍵狀態?希望它不依賴於執行 X。
到目前為止,我發現的一切似乎都在處理完全禁用鍵盤或使用 X。
我的一個想法是創建一個鍵映射,它將所有鍵映射到死鍵,這可以防止任何輸出,但仍然允許我讀取實際的鍵碼。但是,似乎應該有一個更簡單的解決方案來解決這個問題。
如果我直接了解核心原始碼,則您無法將特定輸入設備與全域處理程序斷開連接(請參閱 參考資料
/proc/bus/input/handlers
):kbd
處理程序將始終接收所有輸入事件,並將按鍵事件轉換為按鍵。但是,您可以使用設備上的 ioctrl 來獲取專用的輸入設備
EVIOCGRAB
,可以直接從您的程序中獲取,也可以使用evtest --grab /dev/input/eventX
(用於測試)等工具。只要抓取處於活動狀態,事件就不應該由其他任何東西處理。我不熟悉
python-evdev
,但即使它不支持抓取模式,在 Python 中執行 ioctls 也不難。(我很懶,只在 X 下進行了測試,它可以工作,但我看不出為什麼沒有 X 就不能工作)。