筆電沒有 Home、End 鍵的解決方法(Ubuntu)

對一個無時無刻需要面對大量文字的 自稱 專業人士來說,筆電上面最重要的不是 WSAD,也不是 QWER,而是 Home、End 鍵啊。但是很不幸的,大部分消費級的筆電好像都,為了刻意區分消費和專業市場,刻意把 Home、End 鍵放在幾乎快要按不到的邊陲地區,甚至是直接讓它消失掉…

而我們這次就是要教大家把這些按鍵加回來!

各種抱怨?!

相信看過上一篇文章的朋友們,應該都知道小獅最近買了一台超漂亮的 Zenbook (<– 相當囂張啊,這人)

ux501vw keyboard

我對它實在是沒什麼怨言 除了那該死的鍵位安排,如果你仔細看的話會發現,鍵盤的最右上方分別是 HomePageUpPageDown 和 電源鍵…

嗯對,沒有 End 鍵!

Fix 1: 自訂 KeyMap

首先,第一步就是先了解自己有多少可以用的組合鍵(modifier keys),使用的是 xmodmap 這個指令:

以我的系統來說,目前有 左右 Shift 鍵(Shift_L、Shift_R) 和 左右 Control 鍵(Control_L、Control_R)等等按鍵可以用。

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

xmodmap 是用來編輯 鍵盤對應(keymap)和 滑鼠按鈕(pointer button mappings)的設定工具。
加上 -pm 這個選項的意思是顯示目前可以用的組合鍵(modifier keys)

假設我們要使用 Ctrl + Ctrl + 來作為 HomeEnd 的話,首先要做的就是知道各個按鍵的 keycode,這時候就需要 xev 這個指令來測試一下

注:xev 是 X Window Events 的縮寫

xev

執行之後就會出現一個小小的白色視窗,看到之後把滑鼠移過去點一下,確保視窗有對焦(處在前景狀態),然後你就會看到一大堆文字跑過去。這些就是 X Window 的事件。

按下 之後,應該就會看到類似底下的訊息(因為有按下去和放開,所以是 2 個事件)

KeyPress event, serial 37, synthetic NO, window 0x2200001,
    root 0x270, subw 0x0, time 3905724, (1327,843), root:(1503,1148),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x2200001,
    root 0x270, subw 0x0, time 3905846, (1327,843), root:(1503,1148),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

到目前為止,我們已經知道這台電腦的 Ctrl 是 control, 是 113,接下來,我們要把這組設定檔寫進使用者設定。

xmodmap -e "keycode 113 control = Home"
xmodmap -e "keycode 114 control = End"

把這 2 行寫進自己的 .bashrc 最後面就可以了(記得重新登入)

對,然後我又失敗了… 似乎是會變成 Ctrl + Home

不過成功案例是有的,有興趣的人自己試試吧,如果直接執行的話,重新登入就會失效了。

Fix 2: 改變 NumPad 設定

ux501vw keyboard

讓我們再仔細的看一次這張圖,數字鍵在 NumLock 解除之後,就是 Home End PageUp PageDown,所以這樣就成功了 很不幸的,並不是

雖然 HomeEnd 是能用的,但是加上 Shift 就會變回原本的數字鍵,所以我們要修改預設的行為

首先開啟 /etc/default/keyboard,加入 XKBOPTIONS="numpad:microsoft"

- XKBOPTIONS=""
+ XKBOPTIONS="numpad:microsoft"

改好之後重新套用設定:

sudo dpkg-reconfigure keyboard-configuration

江江,成功了

 

參考資料

發表迴響