お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2017-03-14 20:30:15

wktkshn
新しいメンバ
登録日: 2017-03-14

xkbの設定を変更したらgrid(「ctrl+super+←」など)が動作しなくなってしまった

Ubuntu 16.04 (というより compiz?) には,"ctrl+super+←" でウィンドウが左半分になる機能があります.
←の代わりに↑↓→でも似たようなウィンドウ操作が割り当てられていますね.
正式な名称が分からないのですが,(compiz の設定項目名にならって)ひとまずこれらを "grid" と呼ぶことにしましょう.

こちらで質問させていただきたいのは,キーボードの設定を変更していたらこれが動作しなくなってしまったことについてです.

【発生している現象】
- "ctrl+super+←" などに割り当てられた grid が動作しない.
- しかし,"ctrl+super+←" の入力は (emacs などの) アプリケーション には渡っている.
  (つまり,本来 compiz により捕らえられるはずの入力が,compiz を通り抜けてアプリケーションに渡っている)
- (ほぼ)同じ環境の別の PC では,この現象が再現されない.
  (想定外の要因が絡んでいる?)

【考えられる原因】
- xkb のキーボード設定を(大幅に)変更していること(詳細は後述).

【対症療法】
- CompizConfig 設定マネージャや dconf write コマンドなどを用いて,grid を一度オフにし,その後に再度オンにすると,一時的には解決するが再起動すると元に戻る.

【環境】
- Ubuntu 16.04
- Compiz 0.9.12.2

【質問】
- 上記のような苦し紛れの対症療法ではなく,根本的な解決方法になるものは何かありますでしょうか?
- 入力が compiz を透過してアプリケーションに渡っているのは何故でしょうか?
- 以下で述べるように,直接の引き金となっているのは ctrl, super, ← のいずれのキーにも関係ない部分です.
  それにも関わらず "ctrl+super+←" の入力が影響されるのは何故でしょうか?


上の【考えられる原因】で述べたように,xkb のキーボード設定を大幅に変更しています.
具体的には,/usr/share/X11/xkb/ 以下にある xkb の設定ファイルを直接編集しました(あまり良くない方法かもしれませんが…).
デフォルトの /usr/share/X11/xkb/ を /usr/share/X11/xkb_default/ としてバックアップしてあるので,これらを diff -r した結果を最後に載せておきます.
設定内容の概要をコメントしておくと,
- ctrl, alt, super(win) キーの配置を変更
- 新たに LLV3, RLV3 というキーを作成し,Level 3 Shift (AltGr と同じ?) なる修飾キーに割り当て
- 「Level 3 Shift + アルファベット」で数字や記号を入力できる
といったところでしょうか.
なお,↑↓←→のキーは一切いじっておりません.
正直に申しますと,このあたりの設定は Google 検索の結果をかき集めてどうにか出来たものなので,そもそもやり方が間違っている可能性が大いにあります.
とはいえ,grid 以外の部分では正常に動いているので,それほど大きくは間違ってはいないんじゃないかとも思っています.

上の【質問】の3つ目についてですが,下記の diff 結果の下から3行目にある
modifier_map Mod5    { <LLV3>, <RLV3> };
が直接の引き金になっているようです.
すなわち,この行があると grid が動作しませんが,この行をコメントアウトすると正常に動作するようになります.
この行はあくまで Level 3 Shift の動作を定めているものなので,それが "ctrl+super+←" に影響を与えるのは不可解です.


私にできる範囲でなるべく詳細に書いたつもりですが,何か不足している情報などありましたらご指摘ください.
よろしくお願いいたします.

コード:

diff -r xkb/keycodes/evdev xkb_default/keycodes/evdev
42,43c42
<     // edited
<     // <CAPS> = 66;
---
>     <CAPS> = 66;
69,74c68,69
<     // edited
<     // <LALT> = 64;
<     // <LCTL> = 37;
<     <LLV3> = 64;
<     <LCTL> = 66;
<     <LALT> = 102;
---
>     <LALT> = 64;
>     <LCTL> = 37;
77,79c72
<     <RALT> = 100;
<     <RLV3> = 101;
<     // <RALT> = 108;
---
>     <RALT> = 108;
82,83c75
<     // <RWIN> = 134;
<     <RWIN> = 108;
---
>     <RWIN> = 134;
157d148
<     // edited
160c151
<     // <HKTG> = 101;    // Hiragana/Katakana toggle
---
>     <HKTG> = 101;    // Hiragana/Katakana toggle
162,163c153,154
<     // <HENK> = 100;    // Henkan
<     // <MUHE> = 102;    // Muhenkan
---
>     <HENK> = 100;    // Henkan
>     <MUHE> = 102;    // Muhenkan
diff -r xkb/symbols/jp xkb_default/symbols/jp
101,127d100
<
<     // edited (added)
<     key.type = "THREE_LEVEL";
<     replace key <AD01> { [ q, Q, 1 ] };
<     replace key <AD02> { [ w, W, 2 ] };
(中略)
<     replace key <AC12> { [ bracketright, braceright, bar ] };
diff -r xkb/symbols/pc xkb_default/symbols/pc
41d40
<     // edited
45,48c44
<     key <LLV3> {    [ ISO_Level3_Shift    ]    };
<     key <RLV3> {    [ ISO_Level3_Shift    ]    };
<     //modifier_map Mod5   { <LVL3>, <MDSW> };
<     modifier_map Mod5    { <LLV3>, <RLV3> };
---
>     modifier_map Mod5   { <LVL3>, <MDSW> };

オフライン

 

Board footer

Powered by FluxBB