一、痛點解析:為什麼需要按鍵重映射?

你是否曾遇到過Logitech設備按鍵功能與實際需求不符的情況?比如遊戲鼠標的側鍵在辦公軟件中無用武之地,或者鍵盤的特殊按鍵在Linux系統下無法正常工作。Solaar的按鍵重映射功能正是為解決這些問題而生,讓你能夠自定義設備按鍵行為,提升工作效率與使用體驗。

讀完本文後,你將能夠:

  • 理解Solaar按鍵重映射的技術原理
  • 使用Rule Editor創建自定義重映射規則
  • 掌握高級配置技巧,實現複雜的按鍵行為定製
  • 解決常見的重映射問題

二、技術實現:Solaar重映射的工作原理

2.1 核心模塊架構

Solaar的按鍵重映射功能主要通過以下模塊實現:

  • 規則引擎:lib/logitech_receiver/diversion.py 負責解析和執行重映射規則
  • UI界面:lib/solaar/ui/diversion_rules.py 提供圖形化規則編輯界面
  • 設備通信:lib/logitech_receiver/receiver.py 處理與Logitech設備的通信
  • 輸入模擬:通過XTest或uinput模擬鍵盤鼠標輸入

2.2 工作流程

  1. 按鍵劫持(Diversion):將設備原本的按鍵事件重定向到Solaar處理
  2. 規則匹配:根據用户定義的規則判斷是否觸發重映射
  3. 動作執行:執行重映射後的動作,如模擬按鍵、滾動或運行命令


Solaris (操作系統)_git

2.3 支持的設備類型

Solaar支持多種Logitech設備的重映射,包括:

  • 遊戲鼠標:如G502、G304
  • 辦公鼠標:如MX Master系列、MX Anywhere系列
  • 鍵盤:如MX Keys、Craft Advanced Keyboard
  • 軌跡球:如ERGO M575、MX Ergo

具體支持的設備列表可查看docs/devices/目錄下的設備描述文件。

三、基礎配置:使用Rule Editor創建規則

3.1 打開規則編輯器

在Solaar主窗口中點擊"Rule Editor"按鈕即可打開規則編輯界面。主界面分為三部分:規則樹、編輯面板和操作按鈕。


Solaris (操作系統)_sed_02

3.2 創建簡單規則

以下是創建一個將鼠標側鍵映射為"Ctrl+C"複製功能的示例:

  1. 右鍵點擊左側規則樹中的"User-defined rules"
  2. 選擇"Insert new rule" → "Insert new rule here"
  3. 在右側編輯面板中,點擊"Insert" → "Condition" → "Key"
  4. 選擇要重映射的按鍵,如"M2"(側鍵)
  5. 再次點擊"Insert" → "Action" → "Key press"
  6. 在彈出的對話框中輸入"Ctrl+C"
  7. 點擊"Save"保存規則

3.3 規則結構解析

一個完整的規則由以下部分組成:

  • 條件(Condition):觸發重映射的條件,如按鍵按下、特定程序激活等
  • 動作(Action):滿足條件後執行的操作,如模擬按鍵、滾動或運行命令

Solaar支持多種條件和動作類型,具體可參考docs/rules.md文檔。

四、高級配置:編寫複雜規則

4.1 YAML規則文件

除了使用圖形界面,還可以直接編輯YAML格式的規則文件(通常位於~/.config/solaar/rules.yaml)。以下是一個示例規則,將鼠標手勢"上-下"映射為鎖定屏幕:

%YAML 1.3
---
- MouseGesture: [Mouse Up, Mouse Down]
- Execute: [notify-send, Locking]
- Execute: xflock4
...

4.2 條件組合

使用邏輯運算符組合多個條件:

%YAML 1.3
---
- And:
  - Feature: CROWN
  - Process: quodlibet
- Rule: [ Test: crown_start_press, KeyPress: XF86_AudioMute ]
- Rule: [ Test: crown_pressed, Test: crown_right_ratchet, KeyPress: XF86_AudioNext ]
...

這個規則表示:當使用Craft鍵盤的Crown旋鈕,且當前活動窗口是quodlibet音樂播放器時,按下旋鈕靜音,旋轉旋鈕切換曲目。

4.3 常用動作類型

Solaar支持多種動作類型,包括:

  • KeyPress:模擬按鍵,如KeyPress: "Ctrl+C"
  • MouseScroll:模擬滾動,如MouseScroll: [0, 3](垂直滾動3格)
  • MouseClick:模擬鼠標點擊,如MouseClick: ["left", 2](雙擊左鍵)
  • Set:修改設備設置,如Set: [198E3EB8, dpi, 3000](設置DPI為3000)
  • Execute:運行外部命令,如Execute: [notify-send, "Hello World"]

詳細的動作類型説明可參考docs/rules.md。

五、實用示例:提升工作效率的規則

5.1 辦公場景:多設備切換

%YAML 1.3
---
- Key: [Host Switch Channel 2, pressed]
- Set: [43DAF041, change-host, 1]  # 切換鍵盤主機
- Set: [198E3EB8, change-host, 1]  # 切換鼠標主機
- Execute: [notify-send, Switched to host 2]
...

5.2 編程場景:代碼編輯快捷鍵

%YAML 1.3
---
- And:
  - Key: [M4, pressed]  # 鼠標側鍵M4
  - Process: code  # VS Code激活時
- KeyPress: "Ctrl+Shift+L"  # 選中所有匹配項
...

5.3 遊戲場景:快速切換DPI

%YAML 1.3
---
- Key: [G1, pressed]  # G鍵1
- Set: [198E3EB8, dpi, 800]  # 低DPI模式
- Execute: [notify-send, "DPI: 800"]
...
---
- Key: [G2, pressed]  # G鍵2
- Set: [198E3EB8, dpi, 3200]  # 高DPI模式
- Execute: [notify-send, "DPI: 3200"]
...

六、常見問題與解決方案

6.1 Wayland兼容性問題

在Wayland會話下,部分功能可能無法正常工作。解決方案:

  1. 安裝Solaar GNOME擴展:https://extensions.gnome.org/extension/6162/solaar-extension
  2. 使用uinput代替XTest:
sudo cp rules.d-uinput/42-logitech-unify-permissions.rules /etc/udev/rules.d/

6.2 權限問題

如果無法創建uinput設備,執行以下命令:

sudo setfacl -m u:$USER:rw /dev/uinput

6.3 規則不生效

檢查以下幾點:

  1. 設備是否支持重映射:查看設備文檔中的"Reprogrammable keys"部分
  2. 按鍵是否已正確劫持:在設備設置中確認"Diversion"選項已啓用
  3. 規則是否正確:使用solaar -ddd命令查看調試輸出

七、總結與展望

Solaar的按鍵重映射功能為Logitech設備用户提供了強大的自定義能力,通過簡單的規則配置即可實現複雜的按鍵行為定製。無論是提升辦公效率還是優化遊戲體驗,都能發揮巨大作用。

未來,Solaar計劃增強重映射功能,包括:

  • 更豐富的條件類型,如時間、網絡狀態等
  • 支持更復雜的動作序列和循環
  • 機器學習輔助的智能重映射推薦

如果你在使用過程中遇到問題或有功能建議,可以通過項目的GitHub倉庫提交issue或PR。