Bash

在 dvorak 和 qwerty 之間切換

  • February 2, 2021

我最近開始學習dvorak鍵盤佈局,但有時我仍然需要使用qwerty 。

我正在尋找一個在兩種鍵盤佈局之間切換的腳本。

另外,我想用一個可以在任何地方(在我的 DE我的控制台中)工作的熱鍵呼叫這個腳本。就像在這篇文章中按下關機一樣。

您必須為 X 和您關心的每種文本控制台分別執行此操作。

如果您想在任意鍵映射之間切換,則需要維護狀態,因為通常控制台不會為您執行此操作。這就是 Gnome 和 KDE 等佈局切換器所做的。但是如果你只想在一些知名的鍵盤映射之間切換,你可以查詢控制台(假設這個功能在你的控制台類型上可用),獲取一個鍵發送的目前程式碼,並根據它決定切換到什麼。這裡有幾種可能性:

  • 如果 keycode 24(數字會因控制台類型而異)目前發送q,目前的鍵盤映射看起來像 qwerty,所​​以切換到 dvorak,否則切換到 qwerty。
  • 如果Q並且W有相鄰的鍵碼,它可能是一個 qwerty 佈局。
  • 在鍵映射中添加一個假鍵並查找它的綁定。

這是 X 和 Linux 的實現,使用W= Q+1 測試。請注意,我沒有測試過。請注意,該腳本通常無法通過文本模式遠端登錄使用。

if [ -n "$DISPLAY" ]; then
 if xmodmap -pke | awk '$3=="=" && $4=="q" {q=$2}
                        $3=="=" && $4=="w" {w=$2}
                        END {exit w-q==1}'; then
   setxkbmap us
 else
   setxkbmap dvorak
 fi
elif [ "$TERM" = "linux" ]; then
 if dumpkeys | awk '$3=="=" && $4=="q" {q=$2}
                    $3=="=" && $4=="w" {w=$2}
                    END {exit w-q==1}'; then
   loadkeys us
 else
   loadkeys dvorak
 fi
fi

在 X Window 上,將它綁定到鍵的最佳位置是使用桌面環境或視窗管理器的鍵綁定功能。您可以使密鑰僅執行 X 特定部分。當然,如果你的 DE/WM 有佈局切換功能,那你也可以使用它。

在 Linux 控制台上,鍵綁定的可能性非常有限。您可以將鍵綁定到KeyboardSignal符號。如果您使用的是 SysVinit,請kb::kbrequest:/path/to/script/etc/inittab按下信號時輸入以執行您的腳本(以 root 身份!)。我不知道如何使用 Upstart 配置此鍵的操作。

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