Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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ファイルを読み込んでいるようです。
image.png

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箇所です。
image.png

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

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

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

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

Autokey 設定

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

$ sudo apt install autokey-gtk

画面構成

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

設定方法

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

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

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

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

設定されました。
image.png

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

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

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

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

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

この行を削除します。
image.png

以上で設定は終了です。

設定一覧

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 を「無変換」に割り当てたことで、「無変換」でウインドウがつかめるようになりました。地味に便利かも。
    image.png

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

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
14
Help us understand the problem. What are the problem?