WaylandのコントロールへのCapslockマッピング

WaylandのコントロールへのCapslockマッピング

Fedora 26にアップデートしましたが、Capslockキーは奇妙に動作します(またはまったく動作しません)。 Fedora 25では、xkb設定はCtrlとCapsの変更に非常に効果的です。 Gnome Tweak Toolsで「Caps as Ctrl」を選択しましたが、Capsはまったく何もしません!大文字キーを使用すると、xev次の結果が表示されます。

KeyRelease event, serial 36, synthetic NO, window 0x2600001,
    root 0x273, subw 0x0, time 2293119, (164,-21), root:(271,94),
    state 0x10, keycode 66 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

キーコードの後の括弧には、NoSymbolの代わりにLCtrlを含める必要があります。また、Capsを無効化および/または有効にしてみました。これに加えて、/usr/share/X11/xkb/keycodes/evdevCaps = 37を修正して使用してCapsをLeft Controlと同様にしようとしましたが、これも効果がありませんでした。私を助けてください。私はウェイランド以来少し迷子になりました!

また、以下を介して左のコントロールとAltを変更しました。

<LALT> = 37; //64;
<LCTL> = 64; //37;

前述のファイルから - >これはまだ魅力的です!

答え1

一時的に修正しました(この部分がたくさん愛されてくれることを願っています)。以下では、 ""を除くすべての項目の選択を解除しgnome tweak toolsました。プログラムが「Capslock - Disabled」や「Capslock Disabled」などの多くのオプションを重複して一覧表示し、ほとんどのオプションがはっきりと表示されていないため、Caps Lock制御が多くのオプションによって変更される理由がわかりません。TypingCapslock is also Control

答え2

Gnome調整キーボードとマウスの追加レイアウトオプションここでCaps Lockオプションを見つけることができます。

答え3

Gnome以外の環境、KDE環境、Waylandを扱うリソースがあまりないので、完全性のためにこの答えを残します。

私はDebian Busterを使用しており、XWaylandの上からWMにFluxboxを実行しています(これはXWayland WM以外の場合は動作しない可能性があります)。一般的なタスク、つまりマップを設定すると、.xmodmaprc実際にタスクが実行されます。

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

このソリューションは、XWaylandベースのWMでのみ機能できるというMarkのコメントを反映して更新されました。

答え4

Caps lock別の解決策は、およびを使用するようにCtrlマッピングを実装することです。caps2escinterception_tools

以降、以下のステップを実施し説明した。エスケープと制御のためにCaps2escを介してFedoraでCaps Lockをマッピングする方法、必要に応じて詳細を提供します。


両方をインストールcaps2escしてinterception_tools

cd ~/your/code/directory
git clone https://gitlab.com/interception/linux/tools interception_tools
git clone https://gitlab.com/interception/linux/plugins/caps2esc

inception_tools依存ライブラリのインストール

sudo dnf install cmake yaml-cpp-devel libevdev-devel systemd-devel -y

caps2escそのディレクトリでビルドとインストールを実行し、inception_toolsインストールを確認します。sudo make install

which udevmon
which caps2esc

inception_toolsで横キーを指定するように設定します/etc/caps2esc.yaml。この場合、キーはKEY_CAPSLOCK次のようになりますKEY_ESC

- JOB: "intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE"
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK, KEY_ESC]

これでデーモンプロセスを作成します(参照:この回答到着systemdでプロセスをサービスにする方法は?)のsystemd詳細については、/etc/systemd/system/caps2esc.service次の項目を作成してください。

[Unit]
Description=caps2esc

[Service]
ExecStart=/usr/bin/nice -n -20 /usr/local/bin/udevmon -c /etc/caps2esc.yaml

[Install]
WantedBy=multi-user.target

これでsystemctlサービスを管理するために使用されます。

sudo systemctl daemon-reload
sudo systemctl enable caps2esc # Start on bootup
sudo systemctl start caps2esc # Start now too

caps+これで+をC実行する必要があります。これは端末で確認できます。ctrlC

関連情報