Last Updated on 2026/08/10 by りょう

uConsoleに搭載されている、ゲームコントローラーを模した「A/B/X/Y」ボタンの有効活用として、各ボタンを押すことでアプリケーションランチャー(fuzzel)や終了選択(wlogout)の起動、文字入力モードの全角/半角切替(fcitx5/mozc)等を行えるようにしていた。
「fuzzel」「wlogout」のインストールとセットアップについては上記のリンク先記事を参照のこと。
また、純正のトラックボールキーボードは上記リンク先の設定で使用出来る。
過去形なのは、その後キーボード(トラックボール)を有志作のトラックパッドキーボード(V1.1)へ換装した際に、これら「A/B/X/Y」ボタンの扱いが純正から大幅に変更されてしまい、目的の用途に使えなくなってしまったから。
純正ではUSB接続コントローラーとして認識されるため「AntiMicroX」で各ボタンにキーボードの任意キーを割り当てられ、未使用キーを割り当てればシェルスクリプトで「evtest」を使った「押す/離す」検出とアプリ実行などの動作を行うことが出来た。
トラックパッドキーボードでは「A/B/X/Y」ボタンがそのままキーボードの「A/B/X/Y」キーに固定で割り当てられてしまったため、これら文字入力で通常使用されるキーでは他の動作に置き換えるのは無理だった。
その後、打鍵が軽いトラックパッドキーボード(V2.0)に換装したところ、ファームウェアも更新されていて「A/B/X/Y」ボタンが通常では使用されない「F24/F23/F22/F21」キーに割り当てが変更され、他の動作へ置き換えて使用することが可能になった。
純正キーボードではコントローラーボタンはUSBコントローラーという扱いだったため「AntiMicroX」で実キーに割り当てて、シェルスクリプトで「evtest」を使った対象キーの「押す/離す」検出と長押し判断、対象のアプリ実行を行っていた。
トラックパッドキーボードではそのまま実キーとして認識されるため「AntiMicroX」は不要になる。
割り当てられているキーをそのまま使うのであれば以前作ったスクリプトを少し修正するだけで良いが、別のキーを割り当てようとすると少々工夫が必要。
(例えば「A」ボタンが押されたら「F24」キーではなく「Enter」キーを入力する…など。)
このキーの置き換えに「xremap」を使おうとしたところ、元のスクリプトで使用している「evtest」と対象デバイス(キーボード)の取り合いになってしまうらしく、かなり試行錯誤してみたものの両方の機能を同時に使うこと(或るボタンは「evtest」で短押し/長押しを判断して異なるアプリを起動し、別のボタンは「xremap」で他のキーに置き換えて入力する…など)は出来なかった。
「xremap」について調べてみると、単なるキーの置き換えだけではなく指定キーが押された(短押し)/押し続けている(長押し)の判断も可能で、「evtest」を使った処理から置き換えられることが分かった。
xremap
インストール
ビルドに必要な開発ツールやライブラリを導入する。
sudo apt update sudo apt install -y build-essential libssl-dev pkg-config libinput-dev
公式インストーラを使用してRust環境(Rust/Cargo)を導入する。
curl --proto '=https' --tlsv1.2 -sSf https://rustup.rs | sh
uConsole(自身の環境はBookworm/Wayland)では「features wlroots」 機能を有効にして「xremap(wlroots版)」をインストールする。
cargo install xremap --features wlroots
設定ファイル作成
「~/.config/xremap」に設定ファイル「config.yml」を作成する。
cd ~/.config/xremap sudo nano config.yml
modmap:
- name: Global Remap
remap:
# Convert the F24 key directly to Enter
F24: Enter
# Replace the F22 key with the "Right Alt key (Alt_R)."
# The "F14" virtual key is output only when you press and release the key briefly.
F22:
held: Alt_R
alone: F14
alone_timeout_millis: 400
keymap:
- name: Application Launcher
remap:
# [Short Press] Launch fuzzel when you quickly release the F22 key
F14: { launch: ["/usr/bin/fuzzel"] }
# [Long Press] Launch wlogout while holding down F22 (with the right Alt key held down)
Alt_R: { launch: ["/usr/bin/wlogout", "-b", "3", "-p", "layer-shell"] }
1~12. 押されたボタンに応じてキーの置き換え定義
5. 【A】ボタン(【F24】キー) ⇒【Enter】キー
9. 【X】ボタン (【F22】キー)⇒ 長押しなら【右Alt】キー/短押しなら【F14】キー
長押しの判定は400ms
14~21. 【X】ボタンが押された場合の処理
18. 短押し(【F14】キー)なら「fuzzel」を起動
21. 長押し(【右Alt】キー)なら「wlogout」を起動
【X】ボタンを短押し/長押しで異なるアプリケーションを起動するので判定のためそれぞれ別のキーに割り当てている。
尚、通常キーは長押しするとキーバッファに入力が溜まり誤動作を招く恐れから、元々他のキーと組み合わせて長押しが想定されている【右Alt】キーを割り当てている。
現状では【F14】キーと【右Alt】は特に使用していないため影響は無いと思われる。
自動実行(Wayland/Labwc環境)
xremapをシステム起動時に自動実行する場合は、「~/.config/labwc/」フォルダ内に「autostart」ファイルを作成する。
cd ~/.config/labwc sudo nano autostart
#Wait a moment until the GUI has fully loaded (to allow it to stabilize) sleep 5 #Forced Definition of Environment Variables . "$HOME/.cargo/env" . "$HOME/.profile" . "$HOME/.bashrc" #Automatically run xremap /usr/bin/lwrespawn /home/ryo/.cargo/bin/xremap --watch /home/ryo/.config/xremap/config.yml &
システム起動直後は環境変数や権限がまだ整っていないタイミングで実行される可能性が有るため、暫く待ち(上記の設定では約5秒)、併せて、関連する環境変数の定義が間に合わない場合に備えて実行前に強制定義しておく。
キーボードやポインティングデバイスがサスペンドやスリープ、省電力状態、電源容量不足などで一時的に切断されて認識出来なくなった場合「xremap」が終了してしまう。
これを回避するため「watch」オプションを付与してデバイスの監視を続けて切断後の再認識を行い、それでも終了した場合には「/usr/bin/lwrespawn」で「xremap」を自動再起動する。
※「/home/ryo/.cargo/bin/xremap」と「/home/ryo/.config/xremap/config.yml」は自身のパスに合わせる。
各ボタンのキーと機能の割り当て
現在の割り当ては下記の通り。
| コントローラーボタン | 初期割り当て | 変更後の割り当てと機能 |
| A | 【F24】キー | 【Enter】キー |
| B | 【F23】キー | ー未使用ー |
| X | 【F22】キー | ・短押しで【F14】キーに割り当ててアプリケーションランチャー(fuzzel)を起動 ・長押しで【右Alt】キーに割り当てて終了選択(wlogout)を起動 |
| Y | 【F21】キー | fcitx5/mozcの文字入力モード(全角/半角)をトグル切替 ※置換せずfcitx5の設定で直接指定 |



使用感
ポインティングデバイスをトラックパッドに換えたことで操作感が大幅に向上し、アプリ起動の際にメニューを辿るのもさほど手間に感じなくなっていたけれど、改めてショートカットとアプリランチャーを使うとやはり便利さを実感する。
(今のところ)全く使い途が無いコントローラーボタンをまた有効活用出来たことも大きい。
写真(Leica M10-D、Ricoh GRⅢ)、アマチュア無線(JR4WDU)、デジタルガジェット、3Dプリント、ミリタリー(トイガン、小物)…などなど、興味の赴くままに広く浅く細く長く愉しんでいます。