前回の記事に続いてMacに操作を近づけるシリーズです
対象の環境
今回の対象もLinux Mintでデスクトップ環境はCinnamonです。
※今回使用するxremapはx11もWaylandも対応しているようです。
やりたいこと概要
MacだとCtrlキーのショートカットで以下のような操作が出来ます。
主にテキストを編集するときの操作です。
| キー | 効果 |
|---|---|
| Ctrl + a | カーソルを行頭に移動する |
| Ctrl + e | カーソルを行末に移動する |
| Ctrl + p | カーソルを↑に移動する |
| Ctrl + n | カーソルを↓に移動する |
| Ctrl + f | カーソルを→に移動する |
| Ctrl + b | カーソルを←に移動する |
| Ctrl + h | Backspace |
| Ctrl + d | Delete |
| Ctrl + k | カーソルの位置から行末までを削除する |
※他にも色々ありますが、私がよく使うやつを上げています。
これに慣れるとカーソルキーを押す事がほぼなくなるので、ホームポジションから手を離すことが減りかなり快適です。
そしてMacはCmdがあるので例えば Cmd + a でテキスト全選択が出来るので上記のショートカットになっていても問題ないです。
Cmdキーの利点は他にもあって、例えばLinuxデスクトップを使っていると普段は Ctrl + cでコピーの操作をしているけどターミナルでは Shift + Ctrl + cでないとコピー操作にならなかったりします。地味にストレスを感じるポイントです(ターミナルでは Ctrl + c がプロセスの強制終了のショートカットなので)
Macだと Cmd + c がどのアプリでもコピーとして使えます。この快適さもLinuxで再現させたいです。
xremapのインストール
キーリマップツールのxremapを使います。これを使うことで上記の環境を再現させることが出来ます。
xremapはrust製で、rustのパッケージマネージャであるcargo経由でインストール出来ます。cargoはrustupをインストールすると使えるようになります。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustupをインストールするとpathの設定もされると思います。使っているshellの設定ファイルに以下のような設定が増えているはずです。
. "$HOME/.cargo/env"
shellを再起動してpathが通っているか確認してください。($HOME/.cargo/binにpathが通っているはず)
そして次のコマンドでxremapをインストールします。
cargo install xremap --features x11
わたしの使っているLinux Mintがx11環境なのでx11指定しています。(xremapはwaylandも対応しているようです。)
追記
Ubuntu標準(Gnome)の場合
sudo apt install build-essential
cargo install xremap --features gnome
xremap設定
設定の方針ですが、最初に説明したCtrlキーとのショートカットでカーソル移動へのリマップなどを設定します。
それだけだと元々のショートカットが使えなくなってしまうので、MacでいうCmdキーの役割をAltキーに持たせるための設定をします。
私がLinuxを入れて使っているPCのキーボードが以下の感じなので、キーの位置てきにAltが一番よさそうなのでAltにしました。
設定ファイルは以下の感じです。
Ctrlと被っていないものまでAltにリマップしているのは、普段使いのMacと同じ操作性にするためです。またCaps LockとCtrlの入れ替えもxremapでやっています。
xremapはアプリケーション毎に設定することも出来るので、ターミナルだけは分けて設定しています。
ターミナルはもともとCtrlでのショートカットでカーソル移動が出来るのでそのあたりはいじらずAlt-c,vでのコピペのキーを統一させる設定にしています。
modmap:
- name: CapsLock to Ctrl
remap:
CapsLock: Ctrl_L
keymap:
- name: Global Mac Bindings (Except Terminals)
application:
not: [Gnome-terminal, gnome-terminal-server]
remap:
Alt-c: Ctrl-c
Alt-v: Ctrl-v
Alt-x: Ctrl-x
Alt-z: Ctrl-z
Alt-a: Ctrl-a
Alt-s: Ctrl-s
Alt-f: Ctrl-f
Alt-t: Ctrl-t
Alt-w: Ctrl-w
Ctrl-p: Up
Ctrl-n: Down
Ctrl-b: Left
Ctrl-f: Right
Ctrl-a: Home
Ctrl-e: End
Ctrl-h: BackSpace
Ctrl-d: Delete
Ctrl-k: [Shift-End, BackSpace]
- name: Terminal Specific Bindings
application:
only: [Gnome-terminal, gnome-terminal-server]
remap:
Alt-c: Ctrl-Shift-c
Alt-v: Ctrl-Shift-v
notやonlyの個所で指定しているアプリケーション名はxpropコマンドで取得できます。
ターミナルで以下のコマンドを実行すると、マウスカーソルが+の形になります。この状態で調べたいアプリのWindowをクリックすると名前が出てきます。
xprop | grep WM_CLASS
Waylandの環境でアプリケーション名を調べる方法
※Ubuntuでの操作方法です
Alt + F2キーを押して、lgとコマンドを入れる。
ツールが起動するので、右上のWindowsを選択する。そこに現在開いているアプリの一覧がでる。
wmclassの欄に書かれている名前をアプリケーション名に指定します。
xremapのGnome拡張をインストールする
Ubuntu Gnome(Waylandの環境)だと、これを入れないとアプリケーション名の指定が効きません。
※x11環境の場合は不要です
sudo apt install gnome-browser-connector
Firefoxで
https://extensions.gnome.org/
にアクセスして、サイトの指示に従って拡張機能をインストールする。
その後、サイト上でxremapで検索してxremap用の拡張をインストールします。
https://extensions.gnome.org/extension/5060/xremap/
ここで、一度OS再起動させます。
xremap起動させる
xremapを動かすためにユーザーをinputグループに所属させます。
sudo usermod -aG input $USER
echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' | sudo tee /etc/udev/rules.d/99-input.rules
# 設定を反映
sudo udevadm control --reload-rules && sudo udevadm trigger
systemdで起動させるのでsystemdの設定を書きます。
[Unit]
Description=xremap daemon
# デスクトップ環境が完全に立ち上がるのを待つ
After=graphical-session.target
[Service]
Type=simple
# 起動前に5秒待機(デバイスやディスプレイの準備待ち)
ExecStartPre=/bin/sleep 5
ExecStart=/home/user/.cargo/bin/xremap /home/user/.config/xremap/config.yml
# 失敗しても自動で再試行する
Restart=always
RestartSec=5
Environment=DISPLAY=:0
[Install]
# ログイン時に確実に実行されるように指定
WantedBy=default.target
起動前に5秒待機がポイントです。(ここでかなりはまりました)
xremapサービスを有効化します。
systemctl --user enable xremap
systemctl --user start xremap
これで再起動するとMacのようなショートカットで操作出来るようになると思います。


