setxkbmap se
:とを切り替えるbashスクリプトが必要です
setxkbmap us
。
私の意図は、CtrlEscキーボード>カスタムショートカットを介してそのスクリプトをマッピングすることです。
要点は、スイッチのキーボードレイアウトを使用したいことですCtrlEscape。どのように実装できますか?
答え1
実行中のデスクトップ環境が何であるか、ショートカットキーを割り当てる方法は異なる場合がありますが、このスクリプトは少なくとも私の環境ではグローバルに機能しUbuntu 12.04 box
ますArch Linux
。
#!/bin/bash
(setxkbmap -query | grep -q "layout:\s\+us") && setxkbmap se || setxkbmap us
答え2
最善の方法は、スクリプトを使用するのではなく、キーボードの2つのレイヤー(例えば:)をロードしてオーバーライドしてsetxmodmap "us,se"
ISO_Next_GroupCtrlをEsc送信することです。
見ているこの答えは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は、キーの2番目のシンボルがCtrl(Shiftではない)によって取得されることを示します。
次に、xkb_symbols行を変更してローカルキーマップファイルに "mysymbols(ctr_esc_toggle)"を追加します(例:~/.xkb/keymap/mykbd
;を使用して作成できますsetxkbmap "us,se" ; setxkbmap -print > ~/.xkb/keymap/mykbd
)。これにより、次のような結果が表示されます。
xkb_symbols { include "pc+us+se:2+inet(evdev)+terminate(ctrl_alt_bksp)+compose(rwin)+mysymbols(ctr_esc_toggle)" };
(「se:2」、「:2」は、「se」シンボル定義をグループ2にロードする指示です。さまざまなグループをスタックできます)。
これで、次のようにロードできます。xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY
Ctrl-Escを押すと、「us」と「se」のレイアウトが切り替わります。
ただし、Escを押す前にCtrlを押す必要があり、他の方法は機能しません。 (Escape用のダミー修飾子を定義する必要がありますが、どうすればよいかわかりません。)
答え3
同様の質問には複数の回答があります質問。しかし、それらのどれも私のために働かない。
次のスクリプトはすべての状況で動作するはずです。以下を使用してレイアウトを切り替えると、私のDebianシステムで確実に動作しますsetxkbmap
。
#!/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」に切り替わります。
答え4
同じ言語のバリアントを切り替える場合(例:us langとバリアントintlを持つus langの間):
#!/bin/bash
setxkbmap -query | grep -q 'variant:\s\+intl') && setxkbmap -layout us || setxkbmap -layout us -variant intl