2011-04-25 22 views
2

我想編寫一個程序來重新映射用戶輸入的內容,例如更改鍵盤佈局,但也有更復雜的事情,比如製作一個簡短的程序(即「t qk fx jmps ovr t lzy dg」輸出爲「快速狐狸跳在懶狗上「)。我寧願在X級或以下級別執行此操作。Linux守護進程更改用戶輸入流?

我可以根據實際用戶輸出製作某種虛擬鍵盤嗎?理想情況下,我想要一些簡單的界面(例如,對程序的標準輸入是一系列真實的用戶輸入事件,輸出是用於虛擬鍵盤的用戶輸入事件),但如果這是不可能的,我仍然對指出如何做到這一點。我現在對Linux硬件設備,低級別X內核或內核一無所知;實際上我對Linux很新。 「基礎」教程的鏈接不會被忽視。

回答

2

您可以使用Linux事件子系統做到這一點:

  • 使用Linux input event interface (evdev)從任何輸入設備接收事件。有關實際API的更多信息,另請參閱input.h header file

  • 使用EVIOCGRABioctl來獲取鍵盤設備,以便沒有其他用戶空間應用程序但守護程序將收到任何輸入事件。

  • 使用uinput界面創建一個具有所需功能的新虛擬鍵盤。有關uinput API和this的更多信息,請參閱uinput.h header file以獲取可讀的演練。

有可能作爲一個例子幾個應用程序,如EvRouterESE Key Daemon和我自己的evmapd