歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

Ubuntu8.10 音量快捷鍵[Fn-KEY]錯誤處理

前段時間Ubuntu8.10出來了,本人測試了一下,對偶的本本支持不是太好,特別是Fn音量快捷鍵問題,按下去OSD就一直顯示,不返回,音量要不全開,要不慢慢全關,似乎一直按著鍵使的,經測試,N個筆記本都有這種現象,搜完所有國內BBS,技術支持無果後在國外BBS上苦啃E文,分析系統文件,找到原因了,估計壇子裡也有兄弟使用,如果有這種問題的可以徹底解決了。

    錯誤原因是X的輸入設備驅動evdev需要key-up信號,而通常Fn鍵這個缺少,所以造成音量OSD窗口無法終止,進入死循環。處理辦法就是重新編譯evdev模塊。
    先備份evdev_drv.so文件,出現錯誤後可以用控制台命令重新copy回去。
    cp /usr/lib/xorg/modules/input/evdev_drv.so ~/
    方法1:
    step1:下載已經修改好錯誤的evdev源代碼:
    wget http://labs.ktemkin.com/ubuntu/evdev_fix_2.0.99.tar.gz
    tar -zxvf evdev_fix_2.0.99.tar.gz
    cd evdev_fix
    以後步驟參見公用操作。
    方法2:
    step1:下載Ubuntu源代碼中的evdev文件,下載地址:
    http://packages.ubuntu.com/source/intrepid/xserver-xorg-input-evdev
    step2:在解開的文件包中的./src/evdev.c文件中找到下面代碼:
         /* filter repeat events for chording keys */
         if (value == 2 &&
             (ev->code == KEY_LEFTCTRL || ev->code == KEY_RIGHTCTRL ||
              ev->code == KEY_LEFTSHIFT || ev->code == KEY_RIGHTSHIFT ||
              ev->code == KEY_LEFTALT || ev->code == KEY_RIGHTALT ||
              ev->code == KEY_LEFTMETA || ev->code == KEY_RIGHTMETA ||
              ev->code == KEY_CAPSLOCK || ev->code == KEY_NUMLOCK ||
              ev->code == KEY_SCROLLLOCK)) /* XXX windows keys? */
             return;
    step3:在下面代碼下面新建一行,輸入以下代碼:
         /* fix events for volume keys */
         if(ev->code == KEY_VOLUMEDOWN || ev->code == KEY_VOLUMEUP) //MODIFY THIS LINE
         {
         //post a keydown and then a keyup, as media keys have no automatic key-up
         xf86PostKeyboardEvent(pInfo->dev, code, 1);
         xf86PostKeyboardEvent(pInfo->dev, code, 0);
         return;
         }
    如果還有其它Fn功能鍵錯誤,則可以自行查鍵定義加入,如靜音鍵
         /* fix events for volume keys */
         if(ev->code == KEY_VOLUMEDOWN || ev->code == KEY_VOLUMEUP ||  ev->code == KEY_MUTE) //MODIFY THIS LINE
         {
         //post a keydown and then a keyup, as media keys have no automatic key-up
         xf86PostKeyboardEvent(pInfo->dev, code, 1);
         xf86PostKeyboardEvent(pInfo->dev, code, 0);
         return;
         }
    以上方法1或者方法2做完後執行下面編譯過程:
    step1:安裝編譯工具及環境:
    sudo apt-get install build-essential libtool automake gcc xorg-dev
    step2:編譯:
    ./autogen.sh
    make
    sudo make install
    setp3:拷貝驅動程序到正確的位置:
    sudo cp /usr/local/lib/xorg/modules/input/evdev_drv.so /usr/lib/xorg/modules/input/

    執行完後會自動重啟X,如果沒有自動重啟應手動重啟,一般情況下就OK了,如果出現不能進入X,可在開機時按ESC進入安全模式,恢復備用的模塊文件。
    sudo cp ~/evdev_drv.so /usr/lib/xorg/modules/input/
    sudo reboot

    重申,因為涉及系統基本輸入模塊,必須要求操作者懂點兒基本編譯常識及黑屏處理方法,否則出現系統不能進入X的後果自行負責

Copyright © Linux教程網 All Rights Reserved