web-dev-qa-db-ja.com

setxkbmapオプション-rulesはどのファイルを使用するのか、またそのファイルにキーボードバリアントを追加するにはどうすればよいですか?

Sudoアクセスなしでカスタムキーボードレイアウトを使用することは可能ですか?そうであれば、どのように? で説明したように、Sudoアクセスなしでカスタムキーボードレイアウトをインストールしようとしています、そして特定の質問があります現在の答えがうまくいくと言うsetxkbmapコマンドについて。

具体的には、コマンドの manページ を使用すると、ルールファイルを指定できます。

-rulesfile

要求されたレイアウトとモデルをコンポーネント名のセットに解決するために使用されるルールファイルの名前を指定します。

しかし、どの種類のファイルをそこに置くことを意図しているのか正確には言えず、このオプションの意味を理解するのに苦労しています。

私が理解できる限り、これは/usr/share/X11/xkb/rules/xorgまたはそのエイリアス/usr/share/X11/xkb/rules/baseのいずれかであり、実際に/usr/share/X11/xkb/のすべてを~/xkb/にコピーして実行する場合何かのようなもの

setxkbmap -model pc105 -layout "gb" -variant "extd" -rules ~/xkb/rules/base

その後、動作するようです。

ただし、そのファイルを変更する方法はまったくわかりません。 Sudoアクセスがあるマシンでは、 このチュートリアル に従います:xkb/symbols/gb内にgbキーボードのバリアントを作成し、xkb/rules/evdev.xmlにバリアントを追加します経由で

<variant>
  <configItem>
    <name>custom</name>
    <description>English (UK, custom)</description>
  </configItem>
</variant>

ただし、xkb/rules/baseファイルには、そのようなバリアントを含める明確な場所はありません。実際、gbextdなどの他の関連するintlキーボードバリアントは、 xkb/rules/evdev.lstでは、どこにも見られません。

それで:-rulesファイルオプションでファイルを指定すると、独自のバリアントを設定できますか? (残念ながらSudoアクセスなし)

6
E.P.

XKBのシステムキーボード設定データベースは/usr/share/X11/xkbに保存されます。 XKBレイアウトはRMLVOモデルで定義されます:ルール、モデル、レイアウト、バリアント、オプション。最近使用されている主なルールファイルは、実際にはevdevです。これはsetxkbmapで見ることができます:

$ setxkbmap -query -verbose 10
...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     us
variant:    altgr-intl
options:    caps:hyper,compose:menu
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us(altgr-intl)+inet(evdev)+capslock(hyper)+compose(menu)
geometry:   pc(pc105)

上記の最後の数行で言及したcomponentsのそれぞれは、/usr/share/X11/xkbのシステムデータベースのサブディレクトリであり、表示される値はfilenames+で区切られた)サブディレクトリにあり、この特定のキーマップを構築するために参照されます。括弧は、指定されたファイル(通常はバリアントとオプション)の特定のclauseを示します。

XKBツール(setxkbmapxkbcompなど)は、ファイルの別の場所を検索する引数を取ることができますが、このカスタムの場所はシステムデータベースと同じ形式でなければなりません。システムデータベースは次のようになります。詳細については、各ディレクトリのREADMEを参照してください。

/usr/share/X11/xkb/
├── compat       # ??? dark magic here, avoid
├── geometry     # as in physical, eg for generating layout maps
├── keycodes     # helpful for translating keycodes (from xev) to <FOO>
├── rules        # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols      # main layouts, variants, optional overrides
└── types        # ??? dark magic here, avoid

これらのファイルをオーバーライドしたり、システムデータベースにマージせずに独自のレイアウトを提供したりする場合は、独自のファイル用に同様のディレクトリ構造を作成します。独自のキーボードをゼロから構築する場合を除き、おそらくgeometryまたはkeycodesを使用して何もする必要はないでしょう。

ユーザーごとの構成の場合、$HOME/.xkb/または$HOME/.config/xkb/が理想的です。

$HOME/.config/xkb/
...
├── rules
│   ├── evdev-local
│   ├── evdev-local.lst
│   └── evdev-local.xml
├── symbols
│   ├── my-fun-capslock-options
│   ├── my-US-Dvorak-layout
│   └── my-ZWERTY-layout
...

ディレクトリ構造が整ったら、-I /path/to/local/xkbパラメーターを使用してカスタマイズをロードできます。

setxkbmap -I $HOME/.config/xkb \
  -rules evdev-local           \
  -layout my-ZWERTY-layout     \
  -option myZWERTY:option1,compose:menu,fun:caps_is_insert

指定されたルールファイルで両方が定義されている限り、fun:caps_is_insertなどのローカルオプションとcompose:menuなどのシステムオプションを組み合わせて使用​​できます。 (シンボルファイルには他のシンボルファイルを含めることができますが、ルールファイルのインクルード構文は見つかりませんでした。おそらくシステム全体のevdevルールをローカルバージョンにコピーし、変更を追加する必要があります。)


localectl、GNOMEの設定デーモン、またはsetxkbmapで構成できないWaylandコンポジターなど、他のXKB構成システムでは、カスタムの場所を使用できない場合があります。

リソース:

12
quixotic