setxkbmap se
とsetxkbmap us
を切り替えるbashスクリプトが欲しいのですが。
次に、私の意図は、そのスクリプトをにマップすることです CtrlEsc キーボード>カスタムショートカットを使用します。
ポイントは、キーボード配列を次のように切り替えたいということです。 CtrlEscape。どうすればそれを実装できますか?
実行しているデスクトップ環境がわかりません。ショートカットキーを割り当てる方法はさまざまですが、このスクリプトは、少なくとも私のUbuntu 12.04 box
とArch Linux
ではグローバルに機能します。
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
同様の 質問 にはさまざまな答えがあります。しかし、どれも私にとってはしっかりと機能しません。
次のスクリプトはすべての場合に機能するはずです。 setxkbmap
でレイアウトを切り替えるとき、それは確かに私のDebianシステムで機能します:
#!/bin/bash
seven=`xmodmap -pke | grep "keycode 16" | awk '{print \$5}'`
## If this is the "us" layout
if [ $seven == "ampersand" ]; then
setxkbmap se
else
setxkbmap us
fi
スクリプトはxmodmapの出力を解析して、現在のレイアウトが「us」か「se」かを確認します。 「私たち」のレイアウトでは、 SHIFT+7 「アンパサンド」にマッピングされます。 「us」と「se」のレイアウトのみを切り替える場合は、「アンパサンド」をオンにします 7 「us」レイアウトを使用していて、スクリプトが「se」に変更されることを意味します。 「アンパサンド」がオンになっていない場合 7、スクリプトは「us」に切り替わります。
最良の方法は、スクリプトを使用せずに、2層キーボード(例:setxmodmap "us,se"
)をロードして、 Ctrl-Esc ISO_Next_Groupを送信します
メインのデフォルトファイルを編集せずにいくつかのキーを再定義する方法については、 xkbに関するこの回答 を参照してください(したがって、rootである必要はありません)。ローカルシンボルファイル(例:~/.xkb/symbols/mysymbols
)に、次のように小さなセクションを配置します。
partial modifier_keys
xkb_symbols "ctrl_esc_toggle" {
key <ESC> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ Escape, ISO_Next_Group ]
};
};
pC_CONTROL_LEVEL2は、そのキーのsencondシンボルが(Shiftではなく)Controlで取得されることを示します。
ローカルキーマップファイル(例:~/.xkb/keymap/mykbd
; setxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd
で作成できます)で、xkb_symbols行を変更して「mysymbols(ctr_esc_toggle)」を追加すると、次のようなものになります。
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
(「se:2」に注意してください。「:2」は「se」シンボル定義をGroup2としてロードするように指示します。さまざまなグループをスタックできます)。
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
でロードできるようになりました。次に、Ctrl-Escで「us」レイアウトと「se」レイアウトを切り替えます。
ただし、Escキーを押す前にCtrlキーを押したままにする必要があることに注意してください。それ以外の方法では機能しません(Escapeの仮想修飾子を定義する必要があり、その方法がわかりません)