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

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

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

AutoHotkey (17) AutoKey (3) Linux (23) Ubuntu (19) 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)

新しいコメントを投稿




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

    ブログが趣味で、 月間1,000万PV を達成しました。

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

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About