お知らせ

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

#1 2010-04-07 21:54:16

MidSpecLowLoad
メンバ
登録日: 2009-11-19

Windowsキーはgnome-keybinding-propertiesでなぜMod4と認識されるのでしょうか?

これも困っているわけではなく、ただの疑問です。

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などの別プラットフォームを考慮したとも思えないのですが、
ご存知の方がいらっしゃったらご教授いただけないでしょうか。

オフライン

 

#2 2010-04-08 09:06:34

b-fighter
新しいメンバ
登録日: 2010-04-08

Re: Windowsキーはgnome-keybinding-propertiesでなぜMod4と認識されるのでしょうか?

こんにちは。
/usr/share/X11に移動してターミナルで
grep Mod4 -r .
などとしてみると、たぶん
./xkb/symbols/pc:    modifier_map Mod4   { <LWIN> };
のようなのが色々出てくると思います。自分もあまり詳しくないので、半分妄想になってすみませんが、
キーの概念として、最下層のスキャンコードから、もっと上位の、機能的なものを表現するコードまで、論理的な層がいくつかあって、
gnome-keybinding-propertiesや他のプログラムでは、それぞれが違った層から、キーを表現する名称を取ってきている、
と考えるといいのではないかと思ったりしてます。

オフライン

 

#3 2010-04-08 10:44:08

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: Windowsキーはgnome-keybinding-propertiesでなぜMod4と認識されるのでしょうか?

私の妄想です...
私は、今まで、[Windows]キーの付いたキーボードを使った事がありません。
今、常用しているのは、東プレRealforce106とHHKB Lite2です。
PC-9801初期型からキーボードにさわっていると、最近の便利そうに、一見、見える日本語109配列キーボードは使いにくいのです。
こういった人間を考慮していただき、[Windows]キーは、おまけ的に、CTRLキーやShiftキー、ALTキー等と同じ様にモディファイアキーの一つmod4として扱っているのではないかと?????

オフライン

 

#4 2010-04-08 15:14:48

nimu
メンバ
登録日: 2009-04-02

Re: Windowsキーはgnome-keybinding-propertiesでなぜ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 だと思います。

オフライン

 

#5 2010-04-08 23:27:56

MidSpecLowLoad
メンバ
登録日: 2009-11-19

Re: Windowsキーはgnome-keybinding-propertiesでなぜMod4と認識されるのでしょうか?

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
とも関係ありそうで非常に勉強になりました。

オフライン

 

Board footer

Powered by FluxBB