キーボードレイアウトの切り替え

キーボードレイアウトの切り替え

最終目標

私はArch Linuxをbspwmウィンドウマネージャとsxhkdショートカットデーモンとして使用します。私のアプリケーションで特定のキーの組み合わせをマッピングしたいと思います。山西香港開発研究センターさまざまなキーボードレイアウトで混ざります。たとえば、

# Shuffle through keyboard layouts
super + e
    *action to be executed*

ロケール

まず、セルビア語のキーボードレイアウトのみ(時々)有効にしたいので、セルビア語のロケールを追加する必要があるかどうかわかりません。私の考えでは、キーマッピングで十分だと思います。もしそうなら、セルビア語のロケールを生成したので、これを実行すると、localectl list-local出力は次のようになります。

en_US.UTF-8
sr_RS.UTF-8
sr_RS.UTF-8@latin

これはそれぞれ次のとおりです。

  • アメリカ英語ロケール – UTF-8エンコーディング
  • セルビアのセルビア語ロケール – キリル文字 – UTF-8エンコーディング
  • セルビア用セルビア語ロケール – ラテンスクリプト – UTF-8エンコーディング

キーマップ

私が使用したい3つのレイアウト(シャッフル機能を含む)は次のとおりです。

  • us=アメリカン英語
  • sr-cy=キリルセルビア語
  • sr-latin=ラテンセルビア語

代わりに編集/etc/vconsole.confして設定するか。KEYMAP=sr_cyuslocalectl set-keymap sr_cy

次は私です心配するその後すぐに:

  1. これはエレガントな解決策ではありません。
  2. 他のレイアウトを切り替えることはできません。毎回コマンドを実行し、必要なレイアウトを指定する必要があります。
  3. ログアウトした後、またはシステムを再起動した後も、この変更は完全に維持されますか?答えが「はい」の場合、問題が発生する可能性があります。 LUKS暗号化でLVMを使用しており、ディスクを復号化するにはusレイアウトが必要です。したがって、再起動する前にキリル文字に切り替えることを忘れてしまうと、永遠に別れになります。

質問

/etc/vconsole.conf複数のキーマップを追加してusデフォルト値に設定する方法はありますか?それでは、2つを切り替えるにはどうすればよいですか?これは単純なコマンドですか、それとも小さなスクリプトが必要ですか?これがオプションでない場合、最終目標を達成するための最良の方法は何ですか?

複数のキーマップを持つ回答を見つけようとしましたが、私の問題に適用されるものが見つかりませんでした。特に私の知識を向上させるソリューションや意見や提案に感謝します。よろしくお願いします!

答え1

setxkbmapコマンドで設定したものとは異なるレイアウト名が実際に必要なため、「新しいキーボード記述の読み込み中にエラーが発生しました」というメッセージが表示されます。

を実行すると、localectl list-keymaps | grep sr次のようになります。 sr-cyそして予想通りsr-latin

実行すると、期待localectl list-locales | grep srされる結果も得られます。sr_RS.UTF-8sr_RS.UTF-8@latin

ただし、localectl list-x11-keymap-layouts| grep sr何も返されず、代わりに他の2文字の省略形を使用する必要があります。localectl list-x11-keymap-layouts| grep rsこれはrs、X11で使用するセルビア語のキーボードレイアウトを返します。

したがって、Cyrillic実際に使用する必要がある場合、デフォルトはsetxkbmap rsキリル文字のレイアウトです。

レイアウトを有効にするには、Latinセルビア語のキーボードレイアウトがデフォルトのレイアウトではないため、このバリエーションを特に有効にする必要があります。setxkbmap -layout rs -variant latin

私はこのコマンドを直接使用しますsetxkbmap -layout rs,rs,de,us -variant latin,,,dvp -option 'grp:alt_shift_toggle'。これは次のことを行います。

  • 次へ追加セルビアレイアウトを自分のデフォルトに設定し、ラテン語その変形
  • 次へ追加セルビアレイアウトとデフォルト値(キリル文字)
  • 次へ追加ドイツ人基本レイアウト
  • 次へ追加私たちレイアウトと設定ドヴォルザークプログラマーレイアウト
  • Alt+Shiftキーの組み合わせを使用してレイアウトを切り替えるオプションが追加されました。

同じ順序で設定する必要があります。バリアントに何も設定されていない場合(カンマの後に何も設定されていないことを意味します)、その言語のデフォルト値が使用されます-layout-variant

このロケールを有効にし/etc/locale.genてbuildコマンドを使用しましたsudo locale-gen

localectl を使用してリストすると、次のようになります。

localectl list-locales
C.UTF-8
de_DE.UTF-8
en_DK.UTF-8
en_US.UTF-8
sr_RS.UTF-8
sr_RS.UTF-8@latin

私のデフォルトのlocalectlは次のとおりです。

localectl status
System Locale: LANG=en_US.UTF-8
               LC_NUMERIC=sr_RS@latin
               LC_TIME=sr_RS@latin
               LC_MONETARY=sr_RS@latin
               LC_PAPER=sr_RS@latin
               LC_NAME=sr_RS@latin
               LC_ADDRESS=sr_RS@latin
               LC_TELEPHONE=sr_RS@latin
               LC_MEASUREMENT=sr_RS@latin
               LC_IDENTIFICATION=sr_RS@latin
    VC Keymap: sr-latin
   X11 Layout: rs,latin

私はArch LinuxとI3をタイリングマネージャとして使用しています。~/.config/i3/config

exec --no-startup-id sleep 6 && setxkbmap -layout rs,rs,us,de -variant latin,,dvp, -option 'grp:alt_shift_toggle'

簡単なキーの組み合わせでレイアウトをロードし、レイアウト切り替えを有効にします。

私も持っている

exec --no-startup-id gxkb

現在のキーボードレイアウトを表すアイコンをi3blocksバーに追加します。

OPが同じ構成を使用していないことを知っていますが、これが設定に簡単に変換できると思います。

答え2

私はsetxkbmapDvorakとQUERTYを頻繁に切り替えます。私のウィンドウマネージャがショートカットにバインドされたbashスクリプト~/.local/bin/toggle_kbd(私のエントリに含まれています)があります。PATH現在のキーボード以外のキーボードに設定するために Case ステートメントを実行します。私は次にリストされているキーマップ名を使用していますlocalectl list-keymaps

#!/usr/bin/env bash

case $(setxkbmap -query | grep layout | awk '{ print $2 }') in
          us) setxkbmap sr-cy ;;
       sr-cy) setxkbmap sr-latin ;;
    sr-latin) setxkbmap us -variant altgr-intl ;;
           *) setxkbmap us -variant altgr-intl ;;
esac

Xが再起動されるたびに、地域のキーボード(起動時に使用した通常のキーボード)もリセットされます。これする特定の項目を設定するのではなく、繰り返し見てください。これがあなたにとってどれほど大きな問題かはわかりませんが、スクリプトのアイデアはそれに簡単に適用できます。

答え3

評判が足りないためコメントできません。私は答えがわからない。ちょうど私の考えを共有したかった。

まず、最悪のシナリオです。 USBスティックなどの外部ドライブを作成し、このドライブから起動して内部ドライブからファイルを回復すると、パスワードを入力できない問題を修復できますか?おそらく、最悪のシナリオに備えてこれを試してみてください。

私はlocalectlを使ったことがなく、他のソフトウェアのローカライズも制御しているので、キーボードレイアウトだけを変更するだけでもあなたのニーズに比べて強すぎるようです。私は通常setxkbmap。ただし、これはテストできます。アメリカのキーマップのコピーを作成し、2つのキーを交換し(少なくとも1つは復号化パスワードの一部です)、コピーを適用してシステムを再起動すると、新しいレイアウトがまだ適用されていることを確認できます。 (パスワードがasdfの場合は意味を明確にしてください。fとgを置き換えてasdfまたはasdgを入力する必要があることを確認してください。)

私はあなたのためにこれを行うためにかなり多くを仮定しました。 Xを使わないと全く役に立たない。

関連情報