最終目標
私は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_cy
us
localectl set-keymap sr_cy
次は私です心配するその後すぐに:
- これはエレガントな解決策ではありません。
- 他のレイアウトを切り替えることはできません。毎回コマンドを実行し、必要なレイアウトを指定する必要があります。
- ログアウトした後、またはシステムを再起動した後も、この変更は完全に維持されますか?答えが「はい」の場合、問題が発生する可能性があります。 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-8
sr_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
私はsetxkbmap
Dvorakと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を使わないと全く役に立たない。