はじめに
わたしのメインマシンは Windows です。カーソルキーやファンクションキーを押す際に手がホームポジションから離れてしまうのがイヤなので、AutoHotkey を使って極力ホームポジションから離れなくても済むよう設定しています。
関連記事:
最近、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
<HENK> の 「Henkan」を「Hyper_L」に、<MUHE> の「Muhenkan」を「Meta_L」に修正します。
保存して終了したら、xkb のキャッシュをクリアします。
$ sudo rm -rf /var/lib/xkb/*
その後、Kali Linux を再起動します。
Autokey 設定
いよいよ AutoKey の作業です。なにはなくとも、まずはインストールしましょう。
$ sudo apt install autokey-gtk
画面構成
設定方法
左上の「新規」からフォルダを切ります(後ででもできます)。
わたしは「MySettings」というフォルダの下に、「browser」「cursor」「input_conversion」という3つのサブフォルダを作りました。
今回は、「変換」と「h」を同時に押した際、カーソルを左に動かす設定を作ります。「新規」から「Script」を選択し、名前を入力します。
「Press to Set」ボタンを押し、「h」キーを押し、「Hyper」ボタンを押します。
これで、「変換」と「h」を同時に押すとカーソルを左に動くようになります。同じ手順で、上下左右、Delete、BackSpace などを作ります。ホットキーはお好みで設定してください。
カーソルキーや制御キーなど、特殊キーの名称はこちらを参考にしてください。
autokey - SpecialKeys.wiki
OS のショートカットの無効化
h, j, k, l を上下左右移動に設定すると、「Hyper」+「l」が 、OSで設定されている「ログオフ」とバッティングしてしまうので、これを削除します。
「設定」→「キーボード」→「アプリケーションショートカットキー」タブを選択します。
以上で設定は終了です。
設定一覧
cursor
keyboard.send_keys("<left>")
keyboard.send_keys("<right>")
keyboard.send_keys("<up>")
keyboard.send_keys("<down>")
keyboard.send_keys("<delete>")
keyboard.send_keys("<backspace>")
keyboard.send_keys("<home>")
keyboard.send_keys("<shift>+<end>")
keyboard.send_keys("<delete>")
変換(日本語モードで入力時に押下)
keyboard.send_keys("<f6>")
keyboard.send_keys("<f7>")
keyboard.send_keys("<f8>")
keyboard.send_keys("<f10>")
Chrome タブ操作
keyboard.send_keys("<ctrl>+<page_up>")
keyboard.send_keys("<ctrl>+<page_down>")
window.activate("Chrome")
keyboard.send_keys("<ctrl>+l")
余談
- その1
本当は、「無変換」だけで日本語入力/直接入力を切り替えたかったのですが、「無変換」を Meta に設定してしまったのでできなくなりました。ctrl + space などで代用しようかと思います。
-
その3
処理のコードは Python らしいので、Python が書ける人はもっと高度なことができると思います。
参考サイト
-
AutoKey : Linux Utility for Text Substitution , Hotkeys and Desktop Automation
サンプルのスクリプトやチュートリアルが飼いてあってわかりやすいです(英語だけど機械翻訳でもなんとかなります) -
Ubuntu:無変換・変換キーをMeta・Hyperキー化してAutoKeyでカスタマイズ可能な修飾キーにする方法
かなりお世話になりました。ありがとうございます。 -
autokey - SpecialKeys.wiki
カーソルキーや制御キーなど、特殊キーの名称