web-dev-qa-db-ja.com

xkb-再マップされた修飾子は引き続き修飾子として機能します

Xkbを使用して独自のキーボードレイアウトを作成しています。でも、ちょっと問題があります。

key <AE04> {[ Shift_L ]};
key <AE07> {[ Shift_R ]};
key <LFSH> {[ comma  , semicolon , bar    ]};
key <RTSH> {[ period , colon     , period ]};
modifier_map Shift { <AE04>, <AE07> };

上記は、Shiftキーを他のキーに移動します。新しいシフトキーを押したときに実際に何かを実行させるには、modifier_map行を追加する必要がありました。このコードは、古いシフトキーにも通常の文字を配置します。ここまでは順調ですね。

問題は、古い左シフトキーを押しながら文字を押すと(「a」としましょう)、「、A」が表示されることです。そのため、キーはコンマキーとしても機能しますおよびシフトキーとしても機能します。後者は望ましくありません。同じことが右の古いShiftキーでも起こります。実際、それはcontrolとaltでも起こります。

どうすればこれを解決できますか? modifier_unmapか何かが必要なようです。

4
lydell

setxkbmap -printを実行した後、pcがシンボルリストに含まれていることに気付きました。そのシンボルファイルは、私が望まない通常の修飾子を設定します。

以前は、独自のレイアウトを/usr/share/X11/xkb/symbolsディレクトリと/usr/share/X11/xkb/rules/evdev.xmlファイルに追加していました。これにより、キーボードレイアウトを選択するためのレイアウトがGUIに表示されました。

解決策は、代わりにキーボードレイアウトを最初から作成することです。 notを含まないものには、pcファイルが含まれます。ただし、pcには必要な標準キーボードがたくさんあります。それで、私はそのファイルを上から下まで読み、必要なものを選び出しました。

つまり、レイアウトを最初から作成するということは、基本的に次のことを意味します。

  1. setxkbmap -printの出力をファイルにコピーします。
  2. そのファイルには他のファイルが含まれているだけです。リストを調べて、何を再利用できるかを確認してください。私にとっては、pcを自分のファイルの名前に置き換えることを意味しました。
  3. 必要に応じて新しいファイルを作成します。
  4. xkbcomp -I$HOME/additional-include-folder file-from-step-oneを使用して新しいレイアウトを起動します。

私はこの優れたガイドからこれを(より詳細に)学びました: http://hack.org/mc/writings/xkb.html

2
lydell