:私は間をトグルすることをbashスクリプトを希望
setxkbmap se
してsetxkbmap us
。
次に、CtrlEscキーボード>カスタムショートカットを介してそのスクリプトをマッピングするつもりです。
ポイントは、でキーボードのレイアウトを切り替えたいということですCtrlEscape。どうすれば実装できますか?
:私は間をトグルすることをbashスクリプトを希望
setxkbmap se
してsetxkbmap us
。
次に、CtrlEscキーボード>カスタムショートカットを介してそのスクリプトをマッピングするつもりです。
ポイントは、でキーボードのレイアウトを切り替えたいということですCtrlEscape。どうすれば実装できますか?
回答:
実行しているデスクトップ環境がわかりません。ショートカットキーを割り当てる方法はさまざまですが、このスクリプトは、少なくとも私Ubuntu 12.04 box
とでグローバルに機能しArch Linux
ます。
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
xmodmap
は、以下の私の答えのように解析することです。
setxkbmap
。keyboard shortcuts
LMDEのGUI から設定されたショートカットを使用してレイアウトを切り替える場合も同様です。setxkbmap
それを使用して切り替えるときにのみ変更されます。
同様の質問に対するさまざまな答えがあります。しかし、それらのどれもが私にとって堅牢に機能しません。
次のスクリプトは、すべての場合に機能するはずです。レイアウトを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」であるかどうかを確認します。「us」レイアウトでは、SHIFT+ 7は「アンパサンド」にマッピングされます。「us」と「se」のレイアウトのみを切り替える場合、「アンパサンド」をオンに7すると、「us」のレイアウトが使用され、スクリプトが「se」に変わります。に「アンパサンド」がない場合7、スクリプトは「us」に切り替わります。
最善の方法は、スクリプトを使用せずに、2層のキーボード(例:)をロードしsetxmodmap "us,se"
てCtrl- Escを再定義し、ISO_Next_Groupを送信することです。
メインのデフォルトファイルを編集せずにいくつかのキーを再定義する方法については、xkbでこの回答を参照してください(したがって、ルートである必要はありません)。ローカルシンボルファイル(例~/.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の仮想修飾子を定義する必要があり、その方法がわかりません)。
leftwin+leftalt+space
見えますか?
{ include "pc+us+ru:2+inet(evdev)+group(win_space_toggle)" };