レイアウト切り替えリングからいくつかのキーボードレイアウトを分離するには?

レイアウト切り替えリングからいくつかのキーボードレイアウトを分離するには?

私に必要なのは

  1. Shift-CapsLock私が好きなショートカット(例:
  2. 別のショートカットを使用してベラルーシのレイアウトに切り替えます(例:Ctrl-RightShift実際のバインディングは重要ではありません)
  3. ベラルーシのレイアウトが有効になったら、ロシア語/英語に戻ります。Shift-CapsLock

xkbで可能ですか?では、どうすればよいですか?

答え1

3つの便利なコマンド:

1。これから現在のキーボードレイアウトを取得します。トピック:

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'

バリアントがオプションであるレイアウト(バリアント)を返します。

2。現在のキーボードレイアウトがレイアウト(変形)であることを確認してください。

 setxkbmap -print | grep "layout(variant)"

または「(変形)」はありません。

何も返しません。

サム。キーボードレイアウトを指定された値に設定します。

setxkbmap layout variant

バリアントはオプションです。

(man setxkbmap追加情報)

あなたは何ができますか?

1chmod +x file現在のキーボードレイアウトに基づいてキーボードレイアウトを動的に変更する単純な実行可能()スクリプトを作成します。たとえば、最初のポイントを扱う場合:

#!/bin/bash

if setxkbmap -print | grep "us"
then
  setxkbmap ru
else
  setxkbmap us
fi

2。キーボードショートカットマネージャを使用してShift-CapsLockスクリプトにキーストロークを割り当てます。

頑張ってください!

答え2

実際に必要なのは、完全な状態プロセス(レイアウトに切り替える前に状態を知ることby)が必要なため、不可能です。

ただし、レイアウトリングで減少/増加を可能にするISO_Prev_GroupおよびISO_Next_Groupシンボルに加えて、ISO_First_GroupとISO_Last_Groupという2つのシンボルがあります。このリングを使用すると、us,by,ru単一のスイッチで常に3つのレイアウトのいずれかにアクセスできます。

たとえば、定義Shift-CapsLockレイアウトにあるときにISO_Last_Groupを送信し、中にあるときにISO_First_Groupを送信し、定義 - ISO_Prev_GroupにあるときにISO_Next_Groupを送信し、入るときにISO_Next_Group(またはLast)を送信します。usrubyCtrlRightShiftusruby

望むものとの違いはby

また、byいくつかのベラルーシ語の特定のキリル文字のレイアウトが必要な場合、別のオプションは、ruAltGrやほとんどのラテンキーボードなどの同様のキーを使用してアクセスできるいくつかのキーに追加のシンボルを追加する修正されたレイアウトを使用することですです。

ファイルにはby3つの異なるキーしかないので、ruこれが正しいアプローチであるようです。この場合、レイアウトを次のように積み重ねます。us,ru,by

Shift-Capslockの場合は、「us」でISO_Next_Group、「ru」でISO_Prev_Groupを使用し、「ru」でラッチされたISO_Next_Groupでキーを定義します。

これを行うには、~/.xkb/keymap/mykbdを作成し、そこにsetxkbmapの出力を入れると、次のデフォルトのキーボード定義になります。

setxkbmap "us,ru,by" ; setxkbmap -print > ~/.xkb/keymap/mykbd

次に、~/.xkb/symbols/mysymbols ファイルを作成します。

partial modifier_keys
xkb_symbols "shift_caps_us_ru_by" {
  key <CAPS> {
    symbols[Group1] = [  Caps_Lock, ISO_Next_Group   ],
    symbols[Group2] = [  Caps_Lock, ISO_Prev_Group   ],
    symbols[Group3] = [  Caps_Lock, ISO_First_Group  ]
  };
  key <RALT> {
    symbols[Group2] = [ ISO_Group_Latch ]
  };
};

~/.xkb/keymap/mykbdファイルを編集してxkb_symbols追加する行を変更します。+mysymbols(shift_caps_us_ru_by)

最後に、xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbdロードを使用してラテン語(アメリカ)とキリル語(ロシア語)のレイアウトを切り替えることができます。キリル語では、(右のAlt)キーを押し続けてベラルーシ語の関連文字にアクセスできます。ShiftCapsLockAltGr

答え3

さて、それから私は何ですか?本物必要なのは、MRU(最も最近使用された)の順序でレイアウトを切り替えることです。 GNOMEの基本的なレイアウトスイッチャーの機能は何ですか?正確に(「調整」→「キーボードとマウス」→「追加レイアウトオプション」→「レイアウト変更用キー」チェックボックスが有効になっていないことを確認してください!)ので、現在1つのリングに4つのレイアウト(ロシア語、ベラルーシ語、ウクライナ語) 、英語)があり、最新のレイアウトを簡単に切り替えることができますSuperSpace。これは私の問題といくつかの問題を解決しました。

答え4

使用することをお勧めしますsxhkd(簡単なXショートカットデーモン)。構成がまったく難しくないはずです。次の手順に従ってください。ウィキペディアチュートリアルすぐに実行します。

簡単にするために、sxhkdを使用すると、入力イベント(キーを押すなど)をアクション(キーボードレイアウトを前後に変更するなど)にマッピング/バインドできます。

個人的には、すぐに3つの異なるレイアウトを切り替えます。私が使用するマッピング:

super + k; {u,f,r}
  setxkbmap {us,fr,ru}

super特殊キー(修飾子キーと呼ばれます)であるか、CtrlAltの修飾子キーなどを使用できます(両方とも文書化されています)。

superしたがって、修飾キー(私の場合はWindowsキー)を押してkから2つのキーを放し、3つのキーのいずれかを押すと、押したキーに応じて指定された3つの引数のうちu f rの1つが実行されます。 Order setxkbmap(順序尊重) )。クリックするsuperkとフランス語のレイアウトがf表示されるとします。setxkbmap fr

ps:すでに操作に関連付けられているキーの組み合わせを誤ってバインドすると、望ましくない/予期しない結果が発生する可能性があります(後でバインドすると、以前のバインディングが隠れる可能性があります)。しかし、すべてには常に解決策があることを覚えておいてください。だから試してみることを恐れないでください。

関連情報