2021年2月14日 星期日

鍵盤設定雜記

為了設定 xenta se340d 紅外線電腦遙控器/接收器, 爬了好多鍵盤設定相關文章。 最終勉強成功; 那這一大堆有用到和沒用到的網址... 就順便筆記一下吧。

一、 各種方案

想設定鍵盤, 有好幾種不同的方法 ( 不太順的中文翻譯), 包含以下:

  • udev hwdb: 最上游/最底層的機制, 釜底抽薪。 不只 xorg, 連 vt 環境也一併有效。 複雜。
  • ===== 以下其他方法都只適用於 xorg 環境 =====
  • xmodmap: 較舊。
  • xbindkeys: 較新, 彈性夠,又不會太複雜。 <== 我的選擇, 本文重點
  • xkb: 彈性大; 複雜。
  • 各家視窗環境 (例如 xfce) 自己的設定檔: 這是很下游/很上層的設定, 適用情境較小, 受限於特定的視窗環境。

二、 xbindkeys

ps x | grep xbindkeys 可以發現 xbindkeys 是一個本來就 (以普通用戶身份) 執行的程序, 不需要另外去啟動什麼服務。 手冊也清楚地說了: (1) 預設會去讀取 ~/.xbindkeysrc 設定檔 (2) 每次修改過設定檔之後, 它也會自動去讀取。 如果沒把握, 也可以更明確地直接指示它去讀取更新過的設定檔: xbindkeys -p 或是 killall -HUP xbindkeys 或是更暴力更直白的: killall xbindkeys ; xbindkeys -f ~/.xbindkeysrc 。 如果不小心把 ~/.xbindkeysrc 砍掉了, xbindkeys 會默默地無法啟動。 這時可以 xbindkeys -d > ~/.xbindkeysrc 先產生一個預設的設定檔, 再試著啟動並檢查 xbindkeys 程序。 更詳盡教學請見 archlinux 的 xbindkeys 文件

~/.xbindkeysrc 裡面的語法很簡單, 例如我想要把 se340d 的 「www」 鍵設定成 「叫出視窗選單」, 那就這樣設定:

"xfdesktop -W"
    XF86HomePage

意謂著 「每當接收到 XF86HomePage 鍵, 就執行 xfdesktop -W 指令」。 兩句之間不可插入任何東西, 連註解也不行; 第二句前面至少要有一個空格。 如何查詢按鍵代碼? 可以用 xbindkeys -mk 測試。 在 /usr/include/X11/XF86keysym.h (來自 x11proto-dev 套件) 裡面有著對應的定義, 但名稱略有不同, 稱為 XF86XK_HomePage。

三、 攔截與設定四顆彩色鍵

se340d 有一些鍵一口氣送出好幾個碼, 好像是專門為 win7 設計的。 其中第二排的四個彩色鍵, 在 linux 下產生的效果是切換到 vt1 至 vt4。 用 xbindkeys -mk 查看, 原來按下最左邊的綠鍵時, 它會依序送出 ctrl+alt+a、 ctrl+alt+1、 ctrl+alt+F1 等鍵。 其他三鍵類推。 如果想要重新定義這幾個鍵的功能, 就必須放棄切換虛擬終端機的功能。 但是 在 /etc/X11/xorg.conf.d/*.conf 裡面設定 DontVTSwitch 只會取消切換功能, xbindkeys 卻還是抓不到按鍵。 真正的解法在 這個問答這個問答: 下了 setxkbmap -option srvrkeys:none 指令之後, xorg 就不會處理 ctrl+alt+F1 等鍵了。 但是登出再登入後又會恢復預設值。 若要永久生效, 就要在 /etc/default/keyboard 裡面加一句: XKBOPTIONS="srvrkeys:none"

fcitx 的虛擬鍵盤 但是這樣還不夠。 ctrl+alt+b 會叫出 fcitx 的虛擬鍵盤。 必須從主選單叫出 「設定值」 => 「fcitx 設定」 (或直接下 fcitx-config-gtk3 指令) 叫出設定對話框、 選 「附加元件」 分頁、 勾選 「Advanced」、 取消最下方的 「虛擬鍵盤」。 另外, ctrl+alt+d 是 xfce 的快速鍵 之一, 用來清空/還原桌面 (縮小/還原所有視窗)。 必須從主選單叫出 「設定值」 => 「視窗管理程式」 (或直接下 xfwm4-settings 指令) 叫出設定對話框、 選 「鍵盤」 分頁、 點選 「顯示桌面」、 點兩次 「清除」。

取消 fcitx 的虛擬鍵盤功能 取消 xfce 的「顯示桌面」功能

以上設定完成後, 現在對著紅外線接收器按四顆彩色鍵, 終端機終於可以接收得到。 而且會印出 PQRS 等等四個字母, 那是因為如先前所說的, 每個彩色鍵都會送出好幾個鍵盤碼。 而且對應到 ctrl+alt+c 的第三個鍵還會中斷目前的命令。 隨便啦, 沒力修飾這些細節了, 假設這些鍵對你想開的應用軟體沒有影響, 我們就直接忽略它們吧。 接下來在 ~/.xbindkeysrc 裡面加上這幾列:

"geeqie"
    control + alt + 1

"kmag"
    control + alt + 2

"xfce4-terminal"
    control + alt + 3

"thunar"
    control + alt + 4

終於可以用四顆彩色鍵叫出我常用的應用軟體了! 那麼... 下一步就是找一些鍵盤可操作的 apps 或 web apps 再搭配 遙控器切換視窗、切換火狐分頁 來實作有趣的生活應用囉~

為了設定這個個彩色鍵, 需要放棄六個虛擬終端機、 一個虛擬鍵盤還有桌面清除/還原功能, 犧牲還蠻大的... 如果買得到的話, 還是 HP 那一款紅外線接收器 比較划算。

過年期間四處問親戚小輩誰有興趣用遙控器操作電腦, 想要技術移轉出去; 大家都客氣地笑笑說不需要。 老婆殘酷地評論: 「現在大家都喜歡用手機裝 apps 直接跟電視連線, 誰還會想用遙控器啊? 你這... 太老氣了吧?」 瞬時間阿伯的玻璃心碎了一地~

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。