
Ubuntu日本語フォーラム

ログインしていません。
これも困っているわけではなく、ただの疑問です。
gnome-keybinding-propertiesを起動してショートカットキーの割り当て時に[Windows]キーを押下すると、
"Mod4"と認識されるのですが、なぜなのでしょうか?
私の環境はKarmic日本語Remixで日本語109配列キーボードです。
1.Gnomeデスクトップ環境下のibus-setup「トリガーのキーボードショートカットを選択」では"Super"と認識されます。
2.Xfce4環境下でxfce4-keyboard-settingsによる設定を行えば"Super"になります。
3.xevでは"Super_L"のように認識されます。
上記1.などを考慮するとMacなどの別プラットフォームを考慮したとも思えないのですが、
ご存知の方がいらっしゃったらご教授いただけないでしょうか。
オフライン
こんにちは。
/usr/share/X11に移動してターミナルで
grep Mod4 -r .
などとしてみると、たぶん
./xkb/symbols/pc: modifier_map Mod4 { <LWIN> };
のようなのが色々出てくると思います。自分もあまり詳しくないので、半分妄想になってすみませんが、
キーの概念として、最下層のスキャンコードから、もっと上位の、機能的なものを表現するコードまで、論理的な層がいくつかあって、
gnome-keybinding-propertiesや他のプログラムでは、それぞれが違った層から、キーを表現する名称を取ってきている、
と考えるといいのではないかと思ったりしてます。
オフライン
私の妄想です...
私は、今まで、[Windows]キーの付いたキーボードを使った事がありません。
今、常用しているのは、東プレRealforce106とHHKB Lite2です。
PC-9801初期型からキーボードにさわっていると、最近の便利そうに、一見、見える日本語109配列キーボードは使いにくいのです。
こういった人間を考慮していただき、[Windows]キーは、おまけ的に、CTRLキーやShiftキー、ALTキー等と同じ様にモディファイアキーの一つmod4として扱っているのではないかと?????
オフライン
私もあんまりよく分かっている訳じゃないのですが、
キーを押すと keycode という番号がどっかから送られてくる。これはキーボードによって違ったりするらしい。これが keysym に変換される。(xmodmap -pke というコマンドで表示されます。)
Super_L というのは keysym で、右の Windows キーは Super_R という keysym のようです。
その Super_L も Super_R も Mod4 という Modifier (修飾キーに与えられる) を与えられている。(これは xmodmap というコマンドで分かります)
のようです。(こちらが詳しいです。)
Super_L の Super は LISP マシーンの名残りみたいです(写真) L は Left だと思います。
オフライン
b-fighterさん、siさん、nimuさん ご回答ありがとうございます。
b-fighterさん
/usr/share/X11/xkb/symbols/pc と altwin を確認してみました。
どういう書式なのか理解していないのですが、ずばり Super_L と Mod4 が出てました。
ShiftやControlにはmodifier_mapというのがないのですが、そのあたりがミソなのでしょうか。
不思議に思うのはgnome-keybinding-propertiesで [Alt]が”Mod1”になりそうなのに、そうならない点です。
include "altwin(meta_alt)"はその下のMETAで上書きされるのでしょうか?
altwinの一部
partial modifier_keys
xkb_symbols "meta_alt" {
key <LALT> { [ Alt_L, Meta_L ] };
key <RALT> { [ Alt_R, Meta_R ] };
modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
// modifier_map Mod4 {};
};
pcの一部
key <LFSH> { [ Shift_L ] };
key <LCTL> { [ Control_L ] };
key <LWIN> { [ Super_L ] };
modifier_map Mod4 { <LWIN> };
key <RTSH> { [ Shift_R ] };
key <RCTL> { [ Control_R ] };
key <RWIN> { [ Super_R ] };
modifier_map Mod4 { <RWIN> };
key <MENU> { [ Menu ] };
// begin modifier mappings
modifier_map Shift { Shift_L, Shift_R };
modifier_map Lock { Caps_Lock, ISO_Lock };
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2 { Num_Lock };
// Fake keys for virtual<->real modifiers mapping
key <LVL3> { [ ISO_Level3_Shift ] };
key <MDSW> { [ Mode_switch ] };
modifier_map Mod5 { <LVL3>, <MDSW> };
key <ALT> { [ NoSymbol, Alt_L ] };
include "altwin(meta_alt)"
key <META> { [ NoSymbol, Meta_L ] };
modifier_map Mod1 { <META> };
key <SUPR> { [ NoSymbol, Super_L ] };
modifier_map Mod4 { <SUPR> };
siさん
こういった人間を考慮していただき、[Windows]キーは、おまけ的に、CTRLキーやShiftキー、ALTキー等と同じ様にモディファイアキーの一つmod4として扱っているのではないかと?????
一応このあたりは私も想像はついていまして、#1で挙げているように同じキーが別のコードで表示されていることを問題にしています。
別の方の回答からヒントを得て、/usr/include/X11のヘッダファイルを調べてみたのですが、
X.hというファイルに下記のような記述がありました。これからすると、Shift,CTRL,ALTに次ぐ4番めではなさそうです。
(Mod2はNumlock,Mod3は普通の日本語環境では縁がなさそう)
/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
state in various key-, mouse-, and button-related events. */
#define ShiftMask (1<<0)
#define LockMask (1<<1)
#define ControlMask (1<<2)
#define Mod1Mask (1<<3)
#define Mod2Mask (1<<4)
#define Mod3Mask (1<<5)
#define Mod4Mask (1<<6)
#define Mod5Mask (1<<7)
/* modifier names. Used to build a SetModifierMapping request or
to read a GetModifierMapping request. These correspond to the
masks defined above. */
#define ShiftMapIndex 0
#define LockMapIndex 1
#define ControlMapIndex 2
#define Mod1MapIndex 3
#define Mod2MapIndex 4
#define Mod3MapIndex 5
#define Mod4MapIndex 6
#define Mod5MapIndex 7
nimuさん
b-fighterさんの回答と組み合わせて調べていけば理解が進みそうです。
ライセンス等だけでなくこういった事にもお詳しいのですね。
xmodmap -pkeの出力の横の並びが理解できていないのですが、
keycode 107 = Print Execute Print Execute Print Execute
などは、不思議に思っていた別件
https://bugs.launchpad.net/ubuntu-jp-improvement/+bug/543285
https://forums.ubuntulinux.jp/viewtopic.php?id=7734
とも関係ありそうで非常に勉強になりました。
オフライン