Keyboard-Shortcuts

使特定鍵具有粘性

  • May 30, 2021

我發現在超級使用者的 xorg(真棒桌面管理器)下啟用粘滯鍵,這表明我可以通過

xkbset sticky -twokey

這可以按預期工作,但在我的情況下,我寧願只使特定鍵 ( Alt Gr) 具有粘性,而不是所有修飾鍵。這個可以配置嗎?如果是這樣:在哪裡?

在 X11 上,實現此目的的一種方法是使用 XKB 並使正確的 alt 鍵將目前鎖存模式設置為 AltGr。有幾種方法可以解決它:

選項1

您可以將目前鍵盤佈局導出到文件,僅更改右 alt 鍵 (AltGr) 的行為並將其載入回 X,覆蓋預設佈局:

  1. 執行xkbcomp $DISPLAY current.xkb以導出您目前的鍵盤佈局。
  2. 打開current.xkb文件並找到以下程式碼段:
key <RALT> {
   type= "ONE_LEVEL",
   symbols[Group1]= [ ISO_Level3_Shift ]
};
  1. 更改如下:
key <RALT> {
   type= "ONE_LEVEL",
   symbols[Group1]= [ ISO_Level3_Shift ],
   actions[Group1]= [ LatchMods(mods=AltGr) ]
};
  1. 保存文件並執行xkb current.xkb $DISPLAY以應用新佈局。

注意事項

  1. 新佈局僅適用於目前 X 會話。您可能希望在登錄後自動重新載入它。如果您使用的是視窗管理器,只需添加xkb current.xkb $DISPLAY到您的.xinitrc.xprofile. 如果您使用的是桌面環境,則可能會有點棘手,因為 DE 通常以自己的方式處理鍵盤佈局,並且它們可以覆蓋本地配置。請務必查看他們的文件,或嘗試下面的選項 2
  2. 如果您使用多種鍵盤語言,則需要對每個導出的 xkb 文件重複上述步驟,並在適當的時候以某種方式載入它們(例如,為每種語言使用快捷方式)。

選項 2

您可以創建一個新的 XKB 選項,為 AltGr 鍵啟用所需的行為,然後將其與語言佈局一起啟動:

  1. 創建一個/usr/share/X11/xkb/symbols名為的文件,altgr內容如下:
partial alphanumeric_keys
xkb_symbols "latch" {
   key <RALT> {
       symbols = [ ISO_Level3_Shift ],
       actions = [ LatchMods(mods=AltGr) ]
   };
};
  1. 打開evdev文件/usr/share/X11/xkb/rules並找到該行! option = symbols。在它之後添加一個新行並插入altgr:latch = +altgr(latch). 它將如下所示:
! option  = symbols
 altgr:latch = +altgr(latch)
 ...

+altgr(latch)表示使用位於 中的文件中的latchaltgr``/usr/share/X11/xkb/symbols

現在您需要啟動新選項。您可以執行以下操作之一:

  1. 執行setxkbmap -layout us -variant altgr-intl -option altgr:latch以啟動新選項,將us和替換altgr-intl為您的語言和變體。這將持續到目前的 X 會話(對測試很有用),您可能希望將其添加到.xinitrc或者.xprofile它會在登錄時自動載入。
  2. 如果使用 systemd,請執行sudo localectl --no-convert set-x11-keymap us pc104 altgr-intl altgr:latch/etc/X11/xorg.conf.d更新您的鍵盤配置。
  3. 如果使用桌面環境,可能有辦法告訴它在載入鍵盤佈局時啟動該選項。我知道 GNOME 使用 dconf,您可以在org.gnome.desktop.input-sources.xkb-options.

警告

中的 XKB 文件/usr/share/X11/xkb不能直接編輯,並且在執行系統更新時可能會被覆蓋。更改 XKB 配置的“正確方法”太複雜了,我建議您只需創建一個腳本,在需要時(重新)應用新選項。

引用自:https://unix.stackexchange.com/questions/591754