最強のキーリマッパーで、ラズパイBookwormのWayland環境を最強にする

前回は、ラズパイbookwormでapple magic keyboardが簡単接続できることを報告しました。

その中で 日本語キーボードがなぜ世界最強なのか を説明しました。「linuxならキー配列はどうにでもなる」とも書きましたが、要は、キーの配列や機能を自由にいじれる今日、無駄にたくさんキーがついてる日本語キーボードこそが、アプリ起動のショートカット等を割り当てておくバリエーションが最多で最強のキーボードなのです(もちろん個人の感想 or 妄想です)

実際X11環境のlinuxなら、xmodmapであるとかsetxkmapなどでわりあい自由にキー配列を変更できる、のですが…

おや?

ここまできて、ようやく私は、ある重大な事実に気づいてしまったのです。

ラズパイってwaylandに移行したんだっけ?
xmodmapもsetxkmapもwaylandで使えねーよな。
waylandでキー配置いじるの、割とムズくないか?

当たり前に出来ると思っていたことができないと「あれ?」っと思うあの感じでしょうか。そもそも

windowsならPowerToysで
macならkarabinerで
キー配列をいじるのは、今どきどのOSでも簡単

(ちなみにChromeOSはいじれなかった気がする…とても残念)

でして「キー配列がいじれるlinuxってすごい」というような話ではありません。それが逆に「linuxのwayland環境だとキー配列いじれない」となると、「やっぱりlinuxだめだよね」と言われても、そこは素直に「だめだね」と認めるほかはないです。

wayland環境のキーリマップについて軽くググると

Wayland のセキュリティモデルでは、コンポジタ以外のプログラムが生のキーボード入力を取得できません。一部のコンポジタはキーのリマップをサポートしていますが (例えば、gnome-tweaks で mutter を使う)、その数は多くありません。

入力リマップユーティリティ – ArchWikiより

と出てきまして、これはキビシメな感じ。本格的にやばいなと思い始めたころ、とある救世主に出会います。それが

最強のキーリマッパーxremap

です。

最強のキーリマッパーxremapとは

なぜ最強なのかといえば、やはり作った本人がそう言ってしまっているからでありましょうか。

作者さんも「タイトルは釣りである」と書かれてますので、まあ釣りだよな〜と思って笑って読み飛ばせばよい話なのですが(笑)、一方で「最強といえばxremap」というコンセンサスが一部のネットで存在するのも確かだったりします。

当初X11向けに作られたxremapですが、その後rustで書き換えられ、同時にX11とwaylandの両対応に生まれ変わります。

xremapが素晴らしいのは、アプリごとに個別のキー配列を割り当てられることで、例えば

chromiumにフォーカスしているときだけ、
Win+Sを押したらCtrl+Shift+Tabが出力される

ような設定ができ、これはすなわち

Win+S で逆向きタブ移動が出来る

ことになります(ちなみにWin=Windows Keyです)。もとのCtrl+Shift+Tabはキー入力が大変ですから、Win+Sで済むのは楽ですよね。

さらにxremapでは、同じWin+Sを別アプリでは別の役割に割り当てることができます。例えば

Mousepad(エディタアプリ)に
フォーカスしている時は、
Win+Sでセーブ(Ctrl+S)が出来るように設定できる

のです。同じWin+Sがアプリごとに別の役割を果たしています。このような機能はxmodmapなどでは不可能だったことで、macのkarabinerなどと肩を並べるレベルと言えます。まさに「最強」と言ってさしつかえないのではないでしょうか。

xremapの前にrustをインストールする

xremapはrust製で、rustのインストールについては別記事に新たにまとめました。

とても簡単にインストールできるのですが、ラズパイだけの特殊事情として

32Bit Rapberry Pi OSといいつつ、カーネルだけは64bitで動いていることがある

ので、これが原因でインストールが混乱することがありますので、注意してください。

xremapのインストール

xremapのgithubページを見ながらインストールしましょう。git cloneは必要なくcargoだけでインストールできます。

GitHub - k0kubun/xremap: Key remapper for X11 and Wayland
Key remapper for X11 and Wayland. Contribute to k0kubun/xremap development by creating an account on GitHub.

ターミナルで以下を入力してください。

cargo install xremap --features wlroots

wlrootsは各種ハードウエアの入出力を抽象化するバックエンドだそうで、ラズパイのwaylandコンポジタであるwayfireはwlrootsに基づいて構築されています。

これによりwlrootsに対応したバイナリーが

~/.cargo/bin/xremap

にインストールされます。

xremapを使う前準備

xremapを一般ユーザーの権限で実行できるように以下を実行します。ここに書いたのはdebian向けの設定で、ubuntuの場合はまた別の手続きが必要なようです。詳しくはxremapのgithubページの”If you want to run xremap without sudo, click here.”を参照してください。

echo uinput | sudo tee /etc/modules-load.d/uinput.conf
echo 'KERNEL=="uinput", GROUP="input", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/input.rules

# xremapを実行するユーザー(user1とする)はinputグループに属していないといけない。
# /etc/group でinputグループのユーザーを確認する。
# user1がinputグループに属していない場合は、sudo usermod -aG input user1 で追加。

# 再起動
sudo reboot

xremap を使ってみる

まずはラズパイがwayland環境で動いていることを確認してください。

今回は話がややこしいので、関係ファイル一式をzipでまとめました。こちらからダウンロードして解凍してください。

中身は以下のようになります。

xremap
├── clean-xremap.sh
├── sample-wf.sh
├── sample-wf.yml
├── sample-x11.sh
├── sample-x11.yml
├── wf
└── x11

xremap/sample-wf.ymlにxremapのwayfire向け設定ファイルのサンプルを用意しました。

modmap:
  - name: global
    remap:
      # Capslock をCtrlキーとして利用
      Capslock: Ctrl_L
keymap:
  - name: chromium
    application:
      only: chromium-browser
    remap:
      # chromiumにフォーカス時、Win+Aでタブ移動(Ctrl_L-Tab)
      Super_L-A: Ctrl_L-Tab
      # chromiumにフォーカス時、Win+Sで逆タブ移動(Ctrl_L-Shift-Tab)
      Super_L-S: Ctrl_L-Shift-Tab 
  - name: mousepad
    application:
      only: mousepad
    remap:
      # mousepadにフォーカス時、Win+Sでセーブ(Ctrl_L-S)
      Super_L-S: Ctrl_L-S

xremapを実行します。

~pi/.cargo/bin/xremap ~pi/xremap/sample-wf.yml

# ~pi/xremap/sample.ymlは実際の場所に合わせて書き換えてください。
# コマンドはCtrl+Cで中断できます。

これでcapslockがctrlに置き換えられない場合は、キーボードがxremapに認識されていないので、次のように、キーボード名を指定してやり直してください。

~pi/.cargo/bin/xremap --device "キーボード名" ~pi/xremap/sample-wf.yml

キーボード名は最初にxremapを実行した時に列挙されているはずです。/dev/input/deviceXなどのデバイス名でも良いそうですが、キーボード名を指定したほうが分かりやすいかと思います。

キーボード名を指定してもだめな場合は、何かがおかしいので、これまでの設定を見直してください。

正しい動作が確認できたら、chromiumを立ち上げて、タブを数個作ってください。Win+Aでタブ移動、Win+Sで逆タブ移動が出来るはずです。

また、メインメニュー > アクセサリ > Mousepad を起動して文章を適当に入力して、Win+Sしてください。セーブできるはずです。

同じwin+Sの挙動がアプリケーションによって変化していることが確認できましたか?

ログイン時にxremapを自動起動する

wayland環境へのログイン時にxremapが自動実行されるように設定します。

(この段落は読み飛ばしてもいいです) 今回の設定の方向性について、少し説明します。ログインユーザーが一人だけと分かっていれば、上に書いたコマンドをsystemdのユーザーunitにでもすればよいのだろうと思うのですが、複数のユーザーがログイン・ログアウトを繰り返す環境では、前のユーザーのxremapが残ってたりして問題が起こりそうです。先に述べたapplicationごとにリマップを切り替える機能を使わないと割り切れば--watch=configオプションだけでかなり話を簡単に出来るのですが、xremapのapplication切り替えはやはり捨てがたく感じます。結局、シンプルなスクリプトを組むのがよいかなと思い、説明するのも面倒なのでダウンロードできるようにまとめたのが、先のxremap-setup.zipです。

xremap-setup.zipを解凍してできたディレクトリxremapを、そのまま/opt/xremapへとコピーします。そしてそこにxremapのバイナリーを追加します。

sudo cp -r xremap /opt

# ローカルにインストールしたxremapをラズパイユーザー全員で使えるように
# /opt/xremap/wf/xremapとして登録します。
sudo cp ~/.cargo/bin/xremap /opt/xremap/wf/

ターミナルで/opt/xremap/sample-wf.shを実行すると、sample-wf.ymlを設定ファイルとして、xremapが起動します。

# ターミナルで実行
/opt/xremap/sample-wf.sh

以下が/opt/xremap/sample-wf.shの内容です。

#!/bin/bash

PREFIX=/opt/xremap

# 以前に起動したxremapが残っていることがあるので、それらをkillします。
# sudo権限がないユーザーで利用する場合はsudoers.dに権限を追加してください。
# sudo visudo -f /etc/sudoers.d/clean-xremap で以下を記入。
# ALL ALL=(ALL:ALL) NOPASSWD: /opt/xremap/clean-xremap.sh
sudo $PREFIX/clean-xremap.sh

# $PREFIX/wf/xremapは
# cargo install xremap --features wlrootsでインストールされた
# wlroots用バイナリーである必要があります。
$PREFIX/wf/xremap --watch=config $PREFIX/sample-wf.yml

# キーボードの指定が必要な場合は上をコメントアウトして、下のように指定。
# $PREFIX/wf/xremap --watch=config --device "YOUR_KEYBOARD" $PREFIX/sample-wf.yml

このスクリプトの実行でキーボードが正しく反応しない場合は、前回と同じくキーボード名を、sample-wf.shを編集して指定して、実行し直してください。

キーボード名を設定しても反応がない場合は、何かがおかしいので、これまでの設定を見直してください。

正しい動作が確認できたら、このスクリプトをwaylandへのログイン時に自動実行されるようにwayfireの設定ファイルに登録します。

nano ~/.config/wayfire.iniでログイン時に自動的に実行されるスクリプトを、以下のように追加

[autostart]
sample-wf = /opt/xremap/sample-wf.sh

waylandをログアウトして、再ログインします。ちゃんとxremapが起動しましたでしょうか?

自分好みのカスタマイズを追加したい、X11でも使いたい、他

xremapのページを参考に/opt/xremap/sample-wf.ymlを編集してください。こちらのサンプルファイルも参考になるかもしれません。

設定ファイルを編集するとセーブするだけでxremapに反映されます。ただバックグラウンドで動作している状態だと、設定にエラーがあっても気づくことができないので、自動起動したxremapをkill(killall xremap)して、/opt/xremap/sample-wf.shをターミナル上で手動起動して作業したほうが良いかもしれません。

sample-wf.shは簡単なシェルスクリプトなので、myconfig.sh, myconfig.ymlとしてコピーして別の新たな設定を用意することも簡単でしょう(ただし、スクリプト内のymlファイルのパスなどの書き換えが必要です)。

xremapはX11環境でも利用できます。x11で利用する場合は

cargo install xremap --features x11

で作ったバイナリー~/.cargo/bin/xremapを/opt/xremap/x11にコピーして、sample-x11.shを~/.config/lxsession/LXDE-pi/autostartに登録してください。

Waylandへの道

私はラズパイbookwormを未だにX11環境で利用しています。とはいえwaylandを諦めているわけではなく、将来のwaylandへの大移行に向け、これまでさまざまにwaylandの設定を試してきました。今回のキー配列のリマップの確立で、また一歩、waylandに近づきました。現在のところ

waylandへの道のりの80%まではたどり着いた

と感じています。

とはいえ一番の問題

wayland環境のchromiumで
日本語が入力できない問題は、
やはりでかい

です。これさえ解決されれば、今すぐにでもwaylandに移行できるかもしれないのですが…

waylandのchromiumで日本語入力できない問題についてはこちらをどうぞ。

そのほか、waylandへの移行に向けたこれまでの取り組みはこちら。

うーん。問題多いすねー。カスタマイズ無しでまともに使えてる人いるのかしら…

最強のファイル転送サービスSoqAlbum(無料)

最強つながりということで、また別の最強サービスをお知らせしておきます。

  • スマホからPCにファイルを送りたい。
  • スマホのカメラ・マイクから、写真・音声をPCへ直接取り込みたい。
  • PCとPCでもファイルのやり取りをしたい。
  • ファイルだけじゃなくて、テキスト メッセージも交換したい。

そんなときに最強に便利なのが、本サイトで展開中の最強のファイル転送サービス SoqAlbum です。SoqAlbumがなぜ最強なのか、それは

iPhone, androidからwin, mac, linux, ChromeOS
すべてのOSで使えるから最強!

アカウントパスワード不要、インストールなし、
今すぐ1分で始められるウェブサービスだから最強!

QRコードでスマホがPCに瞬時につながるから最強!
QRコードの読めないPC同士でも簡単につながるから最強!

ただのファイル転送サービスじゃない。
スマホのカメラ・マイクから写真・音声の
PCへの直接取り込みができるから最強!

URLやメールアドレスなどのテキスト情報を
数クリックでメッセージにして
交換できるから最強

P2Pでファイル転送するから機密ファイルも安心、
最強のセキュリティーだから最強!

なんといっても無料だから最強!

SoqAlbumの概要とQRコードを使ったスマホのリンク方法について、以前の記事をどうぞ。

QRコードが使えないPCの場合は、こちらのやり方で接続。

SoqAlbumはMicrosoft Storeの公式アプリです。Windowsの方はMicrosoft Storeにアクセスしてアプリをゲットすればすぐにファイルを交換できますよ

SoqAlbum - Microsoft Store の公式アプリ
QRコードをスマホ(iPhone, Android)でスキャンするだけで、スマホとPCの間のファイル共有が実現します。面倒なアカウント作成や、スマホへのアプリのインストールは必要ありません。またスマホの種類に悩む必要もありません。QRコード...

以上、最強つながりでまとめた、最強に圧が強い、最強のファイル転送サービスSoqAlbumの最強の宣伝でした。

コメント

タイトルとURLをコピーしました