Ubuntu (Kali Linux) で、AutoHotkey っぽいことを AutoKey で実現したい


はじめに

わたしのメインマシンは Windows です。カーソルキーやファンクションキーを押す際に手がホームポジションから離れてしまうのがイヤなので、AutoHotkey を使って極力ホームポジションから離れなくても済むよう設定しています。

関連記事:
- AutoHotKeyで日本語キーボードのホームポジションに引きこもりたい
- Autohotkey で、いつでもどこでもGoogle検索

最近、Kali Linux を使う機会が増えたのですが、Linux には AutoHotkey が無いのでキーボード操作が面倒でした。しかし、AutoKey というソフトを使うことで、ホームポジションから手を離さずにカーソル移動ができたり、マウス操作ゼロで Google 検索ができたりなど、AutoHotkey に近いことが実現できました。

需要がないことは分かっていますが、キーボードの変態設定大好き人間なのでここに記しておきます。
Kali Linux のバージョンは、2020.2 です。

要件定義

  • 「変換」と h, j, k, l キー(のいずれか)の同時押しで、カーソルの上下左右移動したい(←達成)
  • 「変換」と b, n, m キー(のいずれか)の同時押しで、1行削除, BackSpace, Delete したい(←達成)
  • 「無変換」と h, j, k, l(のいずれか)の同時押しで、全角かな変換, 全角カナ変換, 半角カナ変換, 半角英数字変換したい(日本語入力時の F7 ~ F10 変換と同じ)(←達成)
  • Alt + 1,2(のいずれか)で、Chrome のタブ移動をしたい(←達成)
  • 「無変換」だけで、日本語入力と直接入力を切り替えたい(←未達成)

方針

AutoKeyは、Ctrl, Alt, Shift, Super, Hyper, Meta の6種類の修飾キーと他のキーの組み合わせでショートカットキーを作成します。
Super とは Windows キーのことです。Linux の世界では Super と呼ぶらしいです。Hyper, Meta は、昔の特殊なキーボードにあった修飾キーで、現在の一般的なキーボードにはありません。また、Autokey は日本語キーボードには対応していないので、「変換」「無変換」などの特殊なキーには対応していません。
Hyper, Meta は使われていないこと、「変換」「無変換」は使えないということならば、Hyper に「変換」を、Meta に「無変換」を割り当ててしまえば、やりたいことができるはずです。

xkb 設定

このキー割り当ての変更に xkb(X Keyboard Extension)を使用します。まずは、「setxkbmap -print」で、現在の xkb の挙動(設定ファイルの読込対象)を確認します。

$ sudo setxkbmap -print -verbose 10

「/usr/share/X11/xkb/symbols」フォルダの、「pc」「jp」「inet」の3ファイルを読み込んでいるようです。

3つのファイルを読み込んでいますが、今回編集するのは、「inet」だけです。バックアップの後、編集します。

$ sudo cp /usr/share/X11/xkb/symbols/inet /usr/share/X11/xkb/symbols/inet_bak
$ sudo vi /usr/share/X11/xkb/symbols/inet

編集する箇所は、 の2箇所です。

<HENK> の 「Henkan」を「Hyper_L」に、<MUHE> の「Muhenkan」を「Meta_L」に修正します。

保存して終了したら、xkb のキャッシュをクリアします。

$ sudo rm -rf /var/lib/xkb/*

その後、Kali Linux を再起動します。

Autokey 設定

いよいよ AutoKey の作業です。なにはなくとも、まずはインストールしましょう。

$ sudo apt install autokey-gtk

画面構成

  1. 保存した設定一覧
  2. 処理内容(Pythonコード)
  3. 実行条件設定
  4. ホットキー

設定方法

左上の「新規」からフォルダを切ります(後ででもできます)。
わたしは「MySettings」というフォルダの下に、「browser」「cursor」「input_conversion」という3つのサブフォルダを作りました。

今回は、「変換」と「h」を同時に押した際、カーソルを左に動かす設定を作ります。「新規」から「Script」を選択し、名前を入力します。

「Hotkey」の行の「Set」ボタンを押します。

「Press to Set」ボタンを押し、「h」キーを押し、「Hyper」ボタンを押します。

設定されました。

画面右上のスクリプト入力欄に以下のように入力します。

「Save」ボタンを押すと、入力内容が保存されます。

これで、「変換」と「h」を同時に押すとカーソルを左に動くようになります。同じ手順で、上下左右、Delete、BackSpace などを作ります。ホットキーはお好みで設定してください。
カーソルキーや制御キーなど、特殊キーの名称はこちらを参考にしてください。
autokey - SpecialKeys.wiki

OS のショートカットの無効化

h, j, k, l を上下左右移動に設定すると、「Hyper」+「l」が 、OSで設定されている「ログオフ」とバッティングしてしまうので、これを削除します。
「設定」→「キーボード」→「アプリケーションショートカットキー」タブを選択します。

この行を削除します。

以上で設定は終了です。

設定一覧

cursor

カーソル左移動 Hyper+h left.py
keyboard.send_keys("<left>")
カーソル右移動 Hyper+l right.py
keyboard.send_keys("<right>")
カーソル上移動 Hyper+k up.py
keyboard.send_keys("<up>")
カーソル下移動 Hyper+j down.py
keyboard.send_keys("<down>")
delete.py Hyper+n
keyboard.send_keys("<delete>")
backspace.py Hyper+m
keyboard.send_keys("<backspace>")
1行削除 Hyper+b line_delete.py
keyboard.send_keys("<home>")
keyboard.send_keys("<shift>+<end>")
keyboard.send_keys("<delete>")

変換(日本語モードで入力時に押下)

ひらがな Meta+h hiragana_zen.py
keyboard.send_keys("<f6>")
カタカナ全角 Meta+j katakana_zen.py
keyboard.send_keys("<f7>")
カタカナ半角 Meta+k katakana_han.py
keyboard.send_keys("<f8>")
アルファベット Meta+l alphabet.py
keyboard.send_keys("<f10>")

Chrome タブ操作

左タブ移動 ctrl+1 chrome_lefttab.py
keyboard.send_keys("<ctrl>+<page_up>")
右タブ移動 ctrl+2 chrome_righttab.py
keyboard.send_keys("<ctrl>+<page_down>")
Google検索 meta+g chrome_search.py(アドレスバーにフォーカスする。Chromeが起動している必要アリ)
window.activate("Chrome")
keyboard.send_keys("<ctrl>+l")

余談

  • その1

本当は、「無変換」だけで日本語入力/直接入力を切り替えたかったのですが、「無変換」を Meta に設定してしまったのでできなくなりました。ctrl + space などで代用しようかと思います。

  • その2
    Meta を「無変換」に割り当てたことで、「無変換」でウインドウがつかめるようになりました。地味に便利かも。

  • その3
    処理のコードは Python らしいので、Python が書ける人はもっと高度なことができると思います。

参考サイト