web-dev-qa-db-ja.com

xkbでコマンドキーとコントロールキーを段階的に交換する方法は?

コマンドCmdとControl Ctrlのキーを交換して、Appleの長いアルミ製キーボードを使用したい。 Trusty Tahr(14.04)でxkbを使用して、これをどのように実行しますか?

注: This ソリューションは、 13.04またはそれ以前xkbxmodmapに置き換わっているため機能しません。

9

この回答は、主に here の回答に基づいています。この質問に再び答える理由は最終ステップであり、完全には説明されていません。 xkbの詳細については、 herehere 、および here を参照してください。

  1. /usr/share/X11/xkb/symbolsにファイルを作成し(/etc/X11/xkb/symbolsにある場合もあります)、altwin2と呼ばれ、次のマッピングを含みます:

    // Control is SWAPPED with Win-keys 
    partial modifier_keys
    xkb_symbols "cmd_n_ctrl" {
        key <LWIN> {        [       Control_L               ]       };
        key <RWIN> {        [       Control_R               ]       };
        key <LCTL> {       [       Super_L         ]       };
        modifier_map Control { <LWIN>, <RWIN> };
        modifier_map Mod4 { <LCTL> };
    };
    
  2. options = symbols/usr/share/X11/xkb/rules/evdevセクションの下に次の行を挿入します(最初の行の警告は無視してください)。

    altwin2:cmd_n_ctrl               =       +altwin2(cmd_n_ctrl)
    
  3. オプションセクションの下の/usr/share/X11/xkb/rules/evdev.lstに新しいオプションを追加します。

    altwin2:cmd_n_ctrl    Win swapped with Ctrl
    
  4. キーボード設定ファイルの場所がわからない場合は、 dconf-editor を使用して編集し、org :: gnome :: desktop ::の下の"altwin2:cmd_n_ctrl"xkb-optionsを追加します。 input-sources示されているように here 。構成ファイルの場所がわかっている場合は、以下に示すように、XkbOptionsフィールドに新しいオプションを含める必要があります。

    Section "InputClass"
            Identifier "keyboard-layout"
            Driver "evdev"
            MatchIsKeyboard "yes"
            Option "XkbLayout" "us, ru, ca, fr"
            Option "XkbOptions" "altwin2:cmd_n_ctrl"
    EndSection
    
  5. 再起動するか、lightdmを再起動して、変更を更新します。

    Sudo restart lightdm
    

注:レイアウトファイルに直接変更を加えた場合、つまりオプションを使用しない場合は、/var/lib/xkb/のキャッシュファイルを here のように削除する必要があります。

7

16.04では、これがようやく機能するようになりました。 Xmodmapはすべてのアプリで普遍的に機能しません。gnomeTweakツールには機能がなく、dconfのカスタムaltwin2キースワップ(ここでの主な回答のような)の編集は失敗しました。 、そしてエレガントなソリューション:

gksudo gedit /usr/share/X11/xkb/symbols/pc

次のように変更します。

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

key <ESC>  {    [ Escape        ]   };

// The extra key on many European keyboards:
key <LSGT> {    [ less, greater, bar, brokenbar ] };

// The following keys are common to all layouts.
key <BKSL> {    [ backslash,    bar ]   };
key <SPCE> {    [    space      ]   };

include "srvr_ctrl(fkey2vt)"
include "pc(editing)"
include "keypad(x11)"

key <BKSP> {    [ BackSpace, BackSpace  ]   };

key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
key <RTRN> {    [ Return        ]   };

key <CAPS> {    [ Caps_Lock     ]   };
key <NMLK> {    [ Num_Lock      ]   };

key <LFSH> {    [ Shift_L       ]   };
key <LCTL> {    [ Alt_L     ]   };
key <LWIN> {    [ Super_L       ]   };

key <RTSH> {    [ Shift_R       ]   };
key <RCTL> {    [ Alt_R     ]   };
key <RWIN> {    [ Super_R       ]   };
key <MENU> {    [ Menu          ]   };

// Beginning of modifier mappings.
modifier_map Shift  { Shift_L, Shift_R };
modifier_map Lock   { Caps_Lock };
modifier_map Control{ Control_L, Control_R };
modifier_map Mod2   { Num_Lock };
modifier_map Mod4   { Super_L, Super_R };

// Fake keys for virtual<->real modifiers mapping:
key <LVL3> {    [ ISO_Level3_Shift  ]   };
key <MDSW> {    [ Mode_switch       ]   };
modifier_map Mod5   { <LVL3>, <MDSW> };

key <ALT>  {    [ NoSymbol, Control_L, Control_R    ]   };
//include "altwin(meta_alt)"
key <LALT> {    [ Control_L     ]   };
key <RALT> {    [ Control_R     ]   };
modifier_map Mod1   { Alt_L, Alt_R, Meta_L, Meta_R };

key <META> {    [ NoSymbol, Meta_L, Meta_R  ]   };
modifier_map Mod1   { <META> };

key <SUPR> {    [ NoSymbol, Super_L ]   };
modifier_map Mod4   { <SUPR> };

key <HYPR> {    [ NoSymbol, Hyper_L ]   };
modifier_map Mod4   { <HYPR> };
// End of modifier mappings.

key <OUTP> { [ XF86Display ] };
key <KITG> { [ XF86KbdLightOnOff ] };
key <KIDN> { [ XF86KbdBrightnessDown ] };
key <KIUP> { [ XF86KbdBrightnessUp ] };
};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
key <PRSC> {
type= "PC_ALT_LEVEL2",
symbols[Group1]= [ Print, Sys_Req ]
};
key <SCLK> {    [  Scroll_Lock      ]   };
key <PAUS> {
type= "PC_CONTROL_LEVEL2",
symbols[Group1]= [ Pause, Break ]
};
key  <INS> {    [  Insert       ]   };
key <HOME> {    [  Home         ]   };
key <PGUP> {    [  Prior        ]   };
key <DELE> {    [  Delete       ]   };
key  <END> {    [  End          ]   };
key <PGDN> {    [  Next         ]   };

key   <UP> {    [  Up           ]   };
key <LEFT> {    [  Left         ]   };
key <DOWN> {    [  Down         ]   };
key <RGHT> {    [  Right        ]   };
};

セーブ。

rm -rf /var/lib/xkb/*

(これが必要かどうかはわかりませんが、それを行いました。)

リブート。

2
Tom Mercer

Kintoが役立つことがあります。数年にわたってこの問題にいくつかの異なる方法で取り組んだ後、私が最近作成したプロジェクトであり、今では共有するのに十分強固であると感じています。

Kintoインストーラーは、単にpythonを使用して初期インストールを行います。その後は、systemdサービス、bash、xprop、setxkbmap、およびxkbcompになります。私の知る限り、これはこの問題に対する最速かつ最もネイティブな解決策です。

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c

ここにも要点があります。その中心にあるものを見たいだけなら、必要なときにキーマップを変更しません。 Gistには、Cmdと矢印キーを使用するmacOSスタイルのカーソル/ワード単位の操作をセットアップするカスタムxkbキーマップファイルも含まれていません。

https://Gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

要旨コンテンツ

# permanent Apple keyboard keyswap
echo "options hid_Apple swap_opt_cmd=1" | Sudo tee -a /etc/modprobe.d/hid_Apple.conf
update-initramfs -u -k all

# Temporary & instant Apple keyboard keyswap
echo '1' | Sudo tee -a /sys/module/hid_Apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
0
R Ben R