Firefox 136におけるEmacsキーバインド復旧手順(x-set-keys ユーザー向け)
はじめに
本稿では,Firefox 136において,日本国内のユーザー間で利用されてきたキーカスタマイズツールである x-set-keys が機能しなくなった際の解決策を記述します.
XFCEおよびX11環境において,いかにして設定の整合性を取り戻すかに焦点を当てています.
現状の技術的課題
x-set-keys の現状
x-set-keys は,X11のプロトコルを利用して特定のウィンドウ(Firefox等)にキーイベントを送信する優れたローカルプログラムです.
しかし,Firefox 136を含む近年のビルドでは,GTKの入力スタックの変更により,プログラム側からの外部的なキー注入が無視される,あるいは xfconfd による設定上書きが発生しています.
動作不全の要因
.gtkrc等の静的設定ファイルの読み込みスキップ.- XFCEの設定デーモン(xfconfd)が保持するデフォルト値による競合.
- Firefox内部のイベントハンドラとX11プロトコル間の不整合.
解決策:xfconfによるGTKランタイムの修正
x-set-keys 自体の再ビルドではなく,Firefoxが参照している上位のGTK設定を修正することで,機能を復旧させます.
実行手順
以下のコマンドをターミナルで実行してください.これにより,XFCEのシステム設定としてEmacsバインドを強制します.
xfconf-query -c xsettings -p /Gtk/KeyThemeName -s Emacs
実行後,Firefoxを再起動することで,テキストエリア等でのキー操作が再び有効になります.
ダメだった場合,以下も試してみて下さい.
Firefox 内の設定で C-w の競合を回避する
Firefox のショートカットキー(Accelerator)を Ctrl から Alt に変更することで,Ctrl キーを Emacs バインド用に解放できます.
アドレスバーに about:config と入力.
- ui.key.accelKey を探し,値を 18 (Alt) に変更します.
これにより,タブを閉じるのは Alt-w になり,C-w がテキストエリアで機能するようになります. - devtools.editor.keymap -> emacs
x-set-keys ユーザーへの技術的アドバイス
- 設定の優先順位: 現代のFirefoxにおいては,バイナリレベルでのキー注入よりも,システム(GTK/XFCE)側が発行する「KeyTheme」の設定値が優先される傾向にあります.
- 今後の展望: X11環境が維持されている間は本手法が最も確実ですが,Waylandへの完全移行が行われた場合は,OSの入力レイヤー(evdev)で動作するリマッパーへの移行が必要となる可能性があります.
結論
今回の事象は x-set-keys のプログラム上の欠陥ではなく,デスクトップ環境(XFCE)の設定管理とFirefoxのランタイム間の不整合に起因するものです.本手順により,従来の操作感を維持したまま最新のFirefoxを利用することが可能です.
但し,私の環境では,C-a, C-f, C-b, C-n, C-p, C-e などは機能するものの,リージョン選択,コピーなどは動作しなかったので,依然として x-set-keys の再ビルドとインストールが必要でした.
最後に x-set-keys の導入を貼っておきます.
注意: Xのドライバなどを入れ替えて initramfs が更新された場合,作り直しが必要な事があります.
: $ sudo apt-get install libx11-dev libglib2.0-dev git : $ git clone https://github.com/kawao/x-set-keys : $ cd x-set-keys : $ make : $ sudo checkinstall make PREFIX=/usr/local install : $ sudo visudo : yourname ALL=(ALL) SETENV:NOPASSWD: /usr/local/bin/x-set-keys : $ sudo -b /usr/local/bin/x-set-keys --exclude-focus-class=xfce4-terminal /home/yourname/.x-set-keys.conf
(クラス名は xprop WM_CLASS にて調べる)
.x-set-keys.conf
#####################
#####################
C-i :: Tab
C-m :: Return
C-g :: Escape
C-h :: BackSpace
C-d :: Delete
#####################
#####################
C-a :: Home
C-e :: End
C-b :: Left
C-f :: Right
C-p :: Up
C-n :: Down
A-v :: Page_Up
C-v :: Page_Down
A-b :: C-Left
A-f :: C-Right
C-bracketleft S-bracketleft :: C-Up
C-bracketleft S-bracketright :: C-Down
C-bracketleft S-comma :: C-Home
C-bracketleft S-period :: C-End
#####################
#####################
C-space :: $select
A-w :: C-c
C-w :: C-x
C-y :: C-v
A-d :: S-C-Right C-x
C-k :: S-End C-x
A-BackSpace :: S-C-Left C-x
#####################
#####################
C-slash :: C-z
C-s :: C-f
C-r :: C-S-g
C-x C-f :: C-o
C-x C-s :: C-s
C-x k :: C-w
C-x C-c :: A-F4
C-q C-q :: C-q
起動
$ sudo -b /usr/local/bin/x-set-keys --exclude-focus-class=xfce4-terminal /home/yourname/.x-set-keys.conf