有史以來第一次,您可以敲打一下計算機並得到有意義的響應!使用 Linux® 和 Hard Drive Active Protection System(硬盤活動保護系統,HDAPS)內核驅動程序,我們可以訪問 Lenovo(以前稱為 IBM®)ThinkPads 上的嵌入式加速器,然後處理加速器的數據來讀取特定 “敲打” 事件序列(也就是您使用關節敲打筆記本的事件序列),並基於這些敲打事件運行一些命令。雙擊鎖定屏幕,然後敲入密碼來解鎖。敲打顯示屏一次就可以讓 MP3 播放器前進一個音軌。這類可能事物是無窮無盡的。
2003 年,IBM 開始發行集成了加速器和相關軟件的 ThinkPad 筆記本,以便在筆記本掉到地上時對硬盤進行保護。來自 IBM 和其他地方的黑客已經為 Linux 內核開發了一些模塊來利用這些傳感器的優點。屏幕顯示方向、桌面切換、甚至是游戲控制和實時的筆記本傾斜度 3D 模塊現在都已經可以使用了。本文將展示 “敲打代碼” 這種新技術和一個簡單程序,該程序在檢測到特定的敲打代碼時會運行一些命令。
使用帶有 HDAPS 驅動的已更新的內核,我們就可以用一個簡單程序 knockAge 來生成敲打代碼了。我們也可以下載並使用一個 Perl 腳本來定制自己的敲打輸入環境。請參閱本文最後的 下載 和 參考資料 部分給出的鏈接,其中包括了解 knockAge 操作的鏈接。
正如您從展示視頻(請參見下面 參考資料 中的鏈接)可以看到的,敲打操作是由一系列指節敲打構成的。盡管 ThinkPad 的加速器是為保護它不受意外事件的影響,但太強力的振蕩仍然會對硬盤造成損壞。因此我們必須小心。
很多在 2003 年以及這以後生產的 IBM(現在是 Lenovo)的 ThinkPads 中都有 HDAPS 硬件。如果您不確定自己的硬件配置,可以檢查 Lenovo 的 Web 站點上關於您自己型號的機器的技術細節。如果您的機器上沒有 ThinkPad,那麼這段代碼可能無法在您的筆記本上正常工作。
本文是在 x86 體系架構上編寫的。本文中的代碼是在 ThinkPad T42p 的兩個不同模塊上進行開發和測試的。有關 ThinkPad 硬件的鏈接,請參閱 參考資料 部分。
如果您有一台 Apple MacBook,那麼您可能也有這種加速器,並且可以使用相同的方法,通過內核訪問它們。然而,本文中的代碼並沒有在 Apple 硬件上進行測試。
HDAPS 驅動程序必須包括在內核中才能啟用對加速器的訪問。試圖對現有內核增加補丁也不會獲得成功,因此我們建議從自己喜歡的鏡像站點上下載最新的內核。新內核發行版中已經包含了對 HDAPS 驅動程序的支持。
啟動內核配置選擇程序,並在配置中包含 HDAPS 驅動程序。HDAPS 驅動程序位於 Device Drivers > Hardware Monitoring Support > IBM Hard Drive Active Protection System (hdaps) 選項中。更多的內核配置和安裝過程已經超出了本文的范圍,但是在 Web 站點上有很多教程可以提供具體的幫助;有關可以幫助我們入門的鏈接,請參閱 參考資料 一節的內容。
本文是在 2.6.15.1 版本的內核上進行開發和測試的。
從 下載 一節的鏈接中下載源代碼,並從中找到 knockAge.pl 腳本。這就是讓我們可以創建敲打序列的主要 Perl 程序,它還允許監聽特殊的敲打序列並運行命令。下面讓我們來介紹一下這個用戶空間程序的用法,以及 knockAge.pl 程序的配置,然後再對這個函數進行回顧。
使用下面的命令運行 knockAge.pl 程序:
perl knockAge.pl -c
這會啟動 Perl 程序來監聽敲打事件並記錄下它們之間的間距以供將來使用。一旦程序開始運行之後,對筆記本進行的敲打操作就會產生效果。我們並不需要在物理上移動自己的 ThinkPad 來注冊敲打事件,如果 ThinkPad 在一個平面上,只要對其進行一些移動和滑行即可。我建議您用左右握住 ThinkPad 左邊接近連接軸的地方,同時用右手在距離 LCD 底部 3 英寸的地方敲打顯示屏即可。請參閱 下載 部分給出的視頻展示,或參閱 參考資料 中用來創建敲打序列的例子。
體驗不同的敲打幅度和力度,從而了解 knockAge 程序能夠捕獲的事件判斷率。對於創建復雜的敲打事件來說,這非常重要。
第一次真正嘗試敲打應該非常簡單,兩次雙擊之間停留 0.5 秒,然後再次運行 perl knockAge.pl -c
,在看到 “enter a knock sequence” 時穩定地敲打 LCD 邊上兩次,中間停留 0.5 秒。在 4 秒之後會自動超時(這是可以配置的),您所敲打的序列會被打印出來,這類似於下面的例子:
0 540031 _#_ (command here) _#_ <comments here>
讓我們來分析一下這一行的內容:敲打序列,分隔符,命令區,分隔符,最後是注釋區。我們的下一個步驟是將這行內容復制到 knockAge.pl 程序使用的默認配置文件 {$HOME}/.knockFile 中,該配置文件也可能是 /home/<username>/.knockFile 文件。在使用上面的敲打序列行創建好 .knockFile 文件之後,就可以對這行進行修改來運行程序了。將 (command here)
文本修改成 /bin/echo "double tap",並將注釋區的內容修改成更有意義的內容,例如:
0 540031 _#_ /bin/echo "double tap" _#_ Double tap event
現在我們已經修改好這個配置文件,可以打印一條通知了,接下來使用下面的命令在守護模式下運行 knockAge 腳本:
perl knockAge.pl
這個程序會在後台安靜地監聽 ~/.knockFile 所羅列的事件。請使用相同的間隔再次雙擊屏幕,您會看到在屏幕上打印出了 “double tap” 消息。如果我們希望更詳細地了解 knockAge.pl 腳本是如何工作的,那麼我們可以使用下面的命令在守護模式下運行它:
perl knockAge.pl -v