スポンサーリンク
AutoKeyは、ショートカットキーを自由に作成できるLinux用のソフトウェアです。Windows では AutoHotkeyが有名ですが、AutoKeyはそれに比べると機能が劣ります。例えばAutoKeyでは、ショートカットキーの同時押し用キーとして利用可能なキーが、「Ctrl」「Shift」「Alt」などの6種類に限定されています。そこで今回は、「無変換」「変換」を修飾キーとして使用する方法を紹介します。Linuxで変換・無変換を使い倒したいはぜひ(まだレベル低いけど)。
目次
スポンサーリンク
無変換・変換を修飾キーとして使いたい
作業効率を劇的にあげる単純な方法が、暇しすぎている親指を活用することです。
その代表的な方法が、無変換・変換キーに本来とは別の役割を持たせる方法です。
入門では、無変換・変換キーをEnterやBackSpace、もしくはCtrlなどに割り当てる方法があります。
さらにヘビーに使う場合は、無変換・変換キーをあたかも2種類目、3種類目のCtrlキーとして利用し、「無変換+A」「無変換+H」のような組み合わせに対して独自のショートカットキーを割り当てていきます。
これがWindowsでは、AutoHotkeyというソフトウェアを利用することで、まさに自由自在に設定・検証できます。
AutoKeyの制限
AutoKeyでは基本的に、「Ctrl」「Sihft」「Alt」「Super」の4つとその他のキーの組み合わせで、ショートカットキーを作成します。
このような、組み合わせ用のキーのことを、修飾キー(modifier)と呼びます。
最新のAutoKeyでは、その4つの修飾キーに、「Hyper」と「Meta」が加わりました。
しかし、それでも限定されていることには変わりません。
無変換・変換が使えない
というわけなので、「無変換」や「変換」を修飾キーとして利用することはできません。
Super・Hyper・Metaキー?
と、その前に、「Super」「Hyper」「Meta」って何だよ、と思った人がいるかと思います。
「Super」は、Windowsで言うところの「Windows」キーで、実際にキーボードの「Windows」を押すと、Ubuntu上で「Super」として働きます。
では、HyperとMetaは何かと言えば、昔の特定のキーボードにあった、マイナーな修飾キーで、現在の一般的なキーボードに、HyperやMetaそのものは存在しません(AltキーがMetaの代わりに利用されることがある程度)。
なので、「Hyper+K」のようなショートカットキーを作成しても、押すことが出来ない謎のショートカットキーが出来上がります。
方針:無変換・変換キーをMeta・Hyperキーにしよう
つまり、MetaとHyperは、余っている状態になるわけです。
したがって、無変換キーをMetaキーに、変換キーをHyperキーにして、AutoKeyがそう認識してくれるようにできれば、上手いこと無変換・変換キー(物理)を、ショートカットキーの修飾キーとして利用できるようになるわけです。
xkbを使う
このキー割り当ての変更に今回はxkb(X Keyboard Extension)を使用します。
従来 xmodmap が利用されていたようなのですが、最近のUbuntuでは xkb が推奨されているという話がたくさん出てくるので、自分もそれに従いました。
xkb の挙動を確認
まず、「setxkbmap -print」を使用して、現在の xkb の挙動(設定ファイルの読込対象)を確認します。
$ setxkbmap -print -verbose 10 Setting verbose level to 10 locale is C Trying to load rules file ./rules/evdev... Trying to load rules file /usr/share/X11/xkb/rules/evdev... Success. Applied rules from evdev: rules: evdev model: pc105 layout: jp Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete+japan symbols: pc+jp+inet(evdev) geometry: pc(pc105) xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete+japan" }; xkb_symbols { include "pc+jp+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
主に今回の設定の対象となる「symbols」の設定について、「/usr/share/X11/xkb/symbols」にある「pc」「jp」「inet(のevdev)」の3つのファイルが順に適用されていることが分かります。
「<NFER>」「<XFER>」より「<MUHE>」「<HENK>」
xkbを利用して「変換キー」や「無変換キー」をカスタマイズしているブログ記事などを読むと、無変換・変換キーの指定に「<NFER>」「<XFER&」を使っており、私もこのあたりをいろいろいじったのですが、何も起こってくれず、困ってしまいました。
そうしてから、先ほどの適用順序を見て、各ファイルの中身を確認したところ、「/usr/share/X11/xkb/symbols/inet」に、次の設定箇所を見つけました。
// Commented out because HZTG has same keycode as TLDE // key <HZTG> { [ Zenkaku_Hankaku ] }; key <HKTG> { [ Hiragana_Katakana ] }; key <HENK> { [ Henkan ] }; key <MUHE> { [ Muhenkan ] }; key <KATA> { [ Katakana ] }; key <HIRA> { [ Hiragana ] }; key <RO> { [ Romaji ] };
// Keys that are generated on Japanese keyboards //<HZTG> = 93; // Hankaku/Zenkakau toggle - not actually used alias <HZTG> = <TLDE>; <HKTG> = 101; // Hiragana/Katakana toggle <AB11> = 97; // backslash/underscore <HENK> = 100; // Henkan <MUHE> = 102; // Muhenkan <AE13> = 132; // Yen <KATA> = 98; // Katakana <HIRA> = 99; // Hiragana <JPCM> = 103; // KPJPComma //<RO> = 97; // Romaji
ここにある、「<HENK>」「<MUHE>」の設定を変更することで、それぞれの挙動を変更することに成功しました。
「<KATA>(カタカナ)」「<HIRA>(ひらがな)」はちょっとよくわからないものの、しっかり「<HKTG>(ひらがなカタカナ)」もありました。
「Ubuntu 14.04 < VirtualBox 5.0.0 < Windows 8.1 < ThinkPad X250」という構成だったのですが、Ubuntuのバージョン等、従来となにか違ったのかもしれません。
とりあえず、キーの指定方法と、設定場所がわかってくると、それなりの範囲のことは出来るようになります。
無変換・変換をMetaキーとHyperキーに割り当てる
いよいよ、キーの割当をします。
先ほど紹介した「/usr/share/X11/xkb/symbols/inet」の「HENK」と「MUHE」の各行を、次のように変更します($ sudo vim /usr/share/X11/xkb/symbols/inet)。
key <HENK> { [ Hyper_L ] }; key <MUHE> { [ Meta_L ] };
都合よく、MuhenkanとMeta、HenkanとHyperの頭文字が一致して覚えやすいので、このように設定しました。
xkbの設定を反映(再読み込み)する
続いて、まず「$ sudo rm -rf /var/lib/xkb/*」を実行して、xkbのキャッシュを削除します。
そうしたら、一度Ubuntuを再起動(ログアウトでもいいかも)します。
これで反映されます。
Metaキー単独・Henkanキー単独の機能を無効化する
ここまでの設定で、「Meta+K」のようなショートカットを、AutoKeyで設定可能になっています。しかし、実は、そのAutoKeyの設定後でも「Meta」単独でアプリ検索窓が開いてしまったり、「Hyper」単独で、キーボードショートカット一覧が開いてしまうなど、そもそもの単独キー機能が生き残ってしまいます。本当はこれを直接Mozcの直接入力・ひらがな入力(IME無効・有効)に割り当てたいのですが、ここではひとまず無効化してしまします。
通常のシステム設定ではMetaが無効化出来ない
通常のシステム設定の「キーボード>ショートカット」の「独自のショートカット」で、「コマンド」に「#」(何もしない)を設定し、それを発動させるキーにHyper(Hyper_L)を設定すると、従来の挙動がこれで上書きされ、何も起こらなくなります。
しかし、この方法では、Meta(Meta_L)をキーに設定することができず、単独押下時の機能を無効化できません。
Metaキーは、この通常のシステム設定では手に負えないようです。
CompizConfig設定マネージャから無効化する
そこで今回は、もっと強力な設定ツールを利用します。
「$ sudo apt-get install compizconfig-settings-manager」で、CompizConfig 設定マネージャをインストールします。
続いてそれを起動して、「一般」にある「コマンド」設定を開きます。
そして、「コマンド」タブの「Command line 0(コマンドライン 0)」と「Command line 1(コマンドライン 1)」の両方に「#」を入力します。
次に、「キー割り当て」タブの「Run command 0(コマンドライン 0)」の横にある「無効」ボタンをクリックして出てくるダイアログで「有効」にチェックを入れ、「キーの組み合わせをつかむ」をクリックして、「無変換(現在Meta)」を押し、「新しいキーの組み合わせを入力してください」というウィンドウをバツで閉じます。最後にOKを押すと、「<Meta>」が設定されます。
同じことを、「Run command 1(コマンドライン 1)」でも「変換(現在Hyper)」キーで設定します。
これで、単独押下が無効化されました。
AutoKeyの設定をする!
こうして準備が整った上で、AutoKey上で、「無変換+A」の設定を「Meta+A」として設定していけば、どんどん無変換・変換キーを活用できるようになります。
今後
AutoKeyの挙動では、微妙に問題が起こるケースがあるので、アプリごとに挙動を変更する必要がない、堅い部分について、xkb上で設定したいと思います。
また、現状でHyperとMetaという在庫を使ってしまったので、このままではひらがなカタカナキーや右Altキーの使いようがありません。このあたりも、xkbでうまくどうにかして、最終的にxkbの割合を適度に増やし、AutoKeyとのバランスを調節したいと思います。
まずは、変換・無変換の単独押下を、それぞれIMEのONとOFFに割り当てる方法を模索したいと思います。
ちょっと使ってみて
まだ Meta と Hyper のもともとの機能が残ってしまっている。。。
xkbでできることは全てxkbでやって、AutoKeyでやりたいものだけMeta-*かHyper-*で渡す、というのがよいのかもしれない。
参考
スポンサーリンク
スポンサーリンク