web-dev-qa-db-ja.com

gnome-keyboard-propertiesの「5番目のレベルを選択するキー」は何をしますか?

gnome-keyboard-properties(システム設定の[ハードウェア]の下の[キーボード])にあるキーボードの5番目のレベルにアクセスするために使用するキーを指定するオプションがあります。

Screenshot of said dialog

しかし、5番目のレベルを AltGr 第三レベル Right Ctrl キー54を次のように設定した場合:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

さまざまなバリエーションを押すと、次の結果が得られます。

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. それでは、5番目のレベルの修飾子は何をしますか?

  2. 1つのキーから5または6つの異なる文字を取得できるように設定するにはどうすればよいですか(変更者 Shift、 Alt Gr そして Right Ctrl 例えば)?

17
sup

「1。では、5レベルの修飾子は何をするのでしょうか?」

5番目のレベルを選択します。 2番目のレベル修飾子(通常のシフトのみ)は2番目のレベルを選択し、3番目のレベルは3番目のレベルを選択します。

5番目のレベル修飾子が4番目のレベルではなく5番目のレベル(3番目のレベル修飾子の直後)を選択する理由は、これら3つの修飾子をさまざまな方法で組み合わせて8つの異なるレベルを選択できるためです(これには、そのような修飾子なしでキーを押すだけです)。 2↑3 = 8以降、8つの組み合わせがあります。最初の2つの修飾子には、4つの組み合わせがあります。

  • 修飾子なし(レベル1)
  • 第2レベル修飾子、別名シフト(レベル2)
  • 第3レベル修飾子(レベル3)
  • 2番目と3番目の修飾子(レベル4)

3番目の修飾子(5番目のレベル)を追加すると、さらに4つのレベルが追加されます。

「2。 1つのキーから5つまたは6つの異なる文字を取得できるように設定するにはどうすればよいですか(Shiftで変更、 Alt Gr そして Right Ctrl 例えば)?"

まず、キーごとに5文字以上を使用するレイアウトが必要です。既存のレイアウトを選択できますが、現在使用しているレイアウトにさらにレベルを追加するだけの場合は、最適ではない可能性があります。たとえば、 Neo キーボードレイアウト(†1)がありますが、これは「ドイツ語に最適化されている」ため、ほとんどの英語話者にはあまり適していません。

それでも、Neoがレベル5修飾子用に選択したキーを確認することは有益です。

Neo layout

Neoは明らかに「Mod4」のレベル5修飾子を呼び出します。ご覧のとおり、左のシフトキーの右側のキー(LSGT)と右のaltキー/ AltGrキーを使用しています。これはヨーロッパのキーボード(105キー)にあり、USキーボード(104キー)と比較すると、左シフトが狭く、リターンキーが高くて細いです。 USキーボードに基づくキーボードレイアウトの場合、他のキーを選択する必要がある場合があります。

レベル5修飾キーの選択

Supの答えで、彼はXmodmapの使用を選択しました。現在、XmodmapよりもSetxkbmapなどのツールが推奨されています。 Xkbには、レベル5修飾子の選択などの多くの事前定義オプションが付属しています。 man xkeyboard-config を参照してlv5を検索すると、次のオプションが見つかります。

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

そのため、文書化されているオプションは、LSGTキー、右のaltキー、右のWindowsキー、および左のWindowsキーです。これまで見てきたように、Neoは最初の2つのオプションを使用します。

何らかのレイアウトでlv5:ralt_switch_lockオプションを使用するとします。このコマンドは、次のレベル5修飾キーを使用してusレイアウトをセットアップします。

setxkbmap -option "lv5:ralt_switch_lock" us

そのため、man xkeyboard-configに記載されているオプションのいずれかについては、Setxkbmapを使用するときに-optionへの引数として使用してください。

これらのオプションが十分ではなく、別のキーをレベル5修飾子として定義する場合、これらのオプションの宣言を確認することは有益です。それらは/usr/share/X11/xkb/symbols/level5にあるようです。 lv5:ralt_switch_lockの宣言は次のようになります。

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

symbols[Group1]の右側は、各レベルのキーが生成するキーまたは文字を宣言します。別のレベル5シフトキーと一緒に押すと、レベル5修飾子をlockすることになっているため、これは8つの可能なレベルすべてを使用します。したがって、レベル5シフトと他のシフトキーの組み合わせ(すべてになし)を押し続けると、これらすべてのレベルにアクセスできるため、レベル5〜8はISO_Level5_Lockを出力します。シフトの動作のみが必要で、2回押された場合のロックの動作も必要ない場合は、同じファイルからより簡単な宣言を行うことができます。

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

レイアウトにレベルを追加する

Xkbレイアウトはかなりモジュール化されています。既存のレイアウトをincludeして変更できます。したがって、5レベル未満の既存のレイアウトを選択し、それにいくつかのレベルを追加できます。

ファイルをレイアウトとともに/usr/share/X11/xkb/symbols/にコピーするか、Xkbツールがレイアウトを探す場所であればどこにでも新しいレイアウトを作成できます。ただし、これにはSudo特権が必要であるため、最適なソリューションではありません。または、xkb/のディレクトリ構造をコピーして、xkb/の下の適切なディレクトリ、つまりsymbols/にレイアウトを配置することもできます。だからあなたはファイルを作ったと言うxkb-tree/symbols/my-layouts。このファイルで定義されたレイアウトを使用するには、setxkbmap-printオプションを使用してから、出力をxkbcompにパイプします。このラッパースクリプトは、レイアウトを入力として受け取ります。

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

レイアウトを含むファイルに関する限り、4つのレベルを使用する「US international」レイアウトを拡張したいとします。まず、Neoと同じ方法でレベル3およびレベル5シフトキーを設定します。

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

次に、いくつかの余分な文字を追加します。 Qwertyレイアウトの最初の4つのキーを例として使用してみましょう。これらのキーはQからRで、<AD01>から<AD04>に対応します。まず、キーを最大8レベルまで使用できるようにする必要があります。

key.type[Group1] = "EIGHT_LEVEL";

最初の4つのレベルでは、それらを再定義しないために、それらをNoSymbolにマッピングします。次に、2つのレベルを追加します。レベル5では、矢印←↓↑→(†2)を追加します。レベル6では、方向キーを追加します。レイアウトは次のようになります。

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

これを使用するには、作成したラッパースクリプトを使用できます。

./setxkbmap-wrapper "my-layouts(mine)"

†1:NeoはXkbでde(neo)です。 setxkbmap "de(neo)"

†2:Xkbが使用する記号名を見つけるには、keysymdef.hという名前のファイルを検索します。 X11/という名前のディレクトリの下にある必要があります。 Unicode名を使用することもできます。たとえば、U + 2192の場合はU2192です。

13
Guildenstern

さて、少し掘り下げた後:

(1)5番目のレベルを選択するキーは、私がやりたいこととは関係のない(フランスのレイアウトに関して)奇妙なことをします。基本的に、どのキーがISO_Level5_Shiftとして機能するかを設定します。 ISO_Level5_Shiftは、いくつかの不明瞭なレイアウトで使用されます。この回答は、Googleが「ISO_Level5_Shift」を検索したときに提供する結果の数と これらリンク に基づいています。

(2)1つの物理キーから6つのシンボルを取得するために使用することはできません。これを実現する1つの方法は、$ HOMEディレクトリに配置された.xmodmapファイルを使用することです。

まず、コマンド

xmodmap -pm

さまざまな修飾子として機能するキーシンボルを提供します。私のシステムでは次のようでした:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

mod3は、1つのキーで6つのシンボルを使用するためにセットアップする必要があります。これを.xmodmapファイルに配置する必要があります。

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

次に、xmodmap -pmで次のことがわかりました。

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x5e),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c)

キーコード94がmod3として機能するように選択したキーです。さまざまな物理キーのキーコードは、コマンドラインツールxevで見つけることができます(実行してさまざまなキーを押すと、キーコードが表示されます)。

次に、.xmodmapファイルに配置すると

keycode 54 = 1 2 3 4 5 6

または実行

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

Altgr、Shift、キーコード94を使用して、1つのキーから6つの異なるシンボルを取得します(物理レイアウトの左シフトの横にある無効なキーです)。

更新:シンボルが5つだけ必要な場合は、次のように設定すると便利です。

keycode 54 = 1 2 3 3 5 6

そうでない場合は、3の代わりに4を取得します。

8
sup