情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Ubuntu:無変換・変換キーをMeta・Hyperキー化してAutoKeyでカスタマイズ可能な修飾キーにする方法

AutoHotkey (26) AutoKey (3) Linux (29) Ubuntu (27) XKB (2)

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」が加わりました。

ubuntu-xkb-henkan-muhenkan-hyper-meta-autokey-set-hotkey

しかし、それでも限定されていることには変わりません。

無変換・変換が使えない

というわけなので、「無変換」や「変換」を修飾キーとして利用することはできません。

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)」キーで設定します。

ubuntu-xkb-henkan-muhenkan-hyper-meta-compiz-config

これで、単独押下が無効化されました。

AutoKeyの設定をする!

こうして準備が整った上で、AutoKey上で、「無変換+A」の設定を「Meta+A」として設定していけば、どんどん無変換・変換キーを活用できるようになります。

今後

AutoKeyの挙動では、微妙に問題が起こるケースがあるので、アプリごとに挙動を変更する必要がない、堅い部分について、xkb上で設定したいと思います。

また、現状でHyperとMetaという在庫を使ってしまったので、このままではひらがなカタカナキーや右Altキーの使いようがありません。このあたりも、xkbでうまくどうにかして、最終的にxkbの割合を適度に増やし、AutoKeyとのバランスを調節したいと思います。

まずは、変換・無変換の単独押下を、それぞれIMEのONとOFFに割り当てる方法を模索したいと思います。

ちょっと使ってみて

まだ Meta と Hyper のもともとの機能が残ってしまっている。。。

xkbでできることは全てxkbでやって、AutoKeyでやりたいものだけMeta-*かHyper-*で渡す、というのがよいのかもしれない。

参考

コメント(0)

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、スマホアプリの利用中に発生するトラブルや不具合の対策手順や障害情報、 設定の変更方法などについて、解説記事をよく書いています。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンが苦手な人の行動や思考、そしてそんな人を手助けする方法です。

    Amazonのアソシエイトとして、did2は適格販売により収入を得ています。

    RSS | Facebook | Twitter | About