しばらくの間、私はキーボードのWindowsキー(Super_L)をコピーアンドペーストにバインドすることに興味がありましたが、デスクトップとMacBook間の利便性と一貫性以外の理由はありませんでした。
私はxmodmapについて読んで次を実行した後、私は近くにいると思いました:
$ # re-map Super_L to Mode_switch, the 3rd col in keymap table `xmodmap -pke`
$ xmodmap -e "keycode 133 = Mode_switch"
$ # map Mode_switch+c to copy
$ xmodmap -e "keycode 54 = c C XF86_Copy C"
$ # map Mode_switch+v to paste
$ xmodmap -e "keycode 55 = v V XF86_Paste V"
残念ながら、XF86CopyとXF86Pasteはまったく機能していないようです。それらは/usr/include/X11/XF86keysym.h
およびxev
は、キーシーケンスがXによってXF86PasteおよびXF86Copyとして解釈されていることを示しています。これらの記号は実際に機能しますか?アプリケーションレベルのサポートが必要ですか?
左側のWindows/Logo/Super
キーを別のCtrl
キーとして機能するようにバインドするのはどうですか?
これは、次のxmodmapコマンドで実現できます。
remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L
上記の行をsuper_as_ctrl.xmodmap
として保存したとすると、次のコマンドを実行して効果をテストできます
xmodmap super_as_ctrl.xmodmap
変更を永続的にするには(再ログイン/再起動後も存続する)、ファイルの名前をホームフォルダーの.Xmodmap
に変更します。
(上記はUbuntu 11.10ライブシステムでテストされていますが、他のLinuxディストリビューションでも同じです)
Super
をCtrl
にバインドすると、Super-C
を使用してほぼすべての場所にコピーできるようになります。唯一の一般的な例外は、ターミナルプログラムです。ただし、そこにショートカットを再定義できます。
gnome-terminal
にもこのオプションがあることがわかりました(とにかくCtrl-Shift-C
に慣れるまではありませんでした)。これを使用する場合は、メニューのEdit / Keyboard Shortcuts...
に移動し、Ctrl-C
をコピーに、Ctrl-V
を貼り付けに割り当てます。 konsole
などについても同様です。
心配しないでください。ショートカットを使用してプログラムを終了する機能が失われることはありません。端末のコピーショートカットを再バインドした後は、以前のCtrl-Shift-C
と同じようにCtrl-C
を使用できます。端末はShiftが押されたかどうかをここで区別しません。そして、ショートカットはコピーのためにもう捕らえられません。あるいは、MountainXが彼の答えで示唆しているように、ターミネートを別のショートカットに再バインドします。
コピーアンドペーストのキーシンボルについて:どうやら効果がないようです。コピーアクションをShift-ScrollLockに割り当てることですばやくテストしました(これは未使用であり、修飾キー以外でテストしたかったのです)。
xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'
XF86AudioMuteを押しても効果はありません。ただし、文字「a」を割り当てると機能しました。したがって、これらのXF86特殊キーシンボルには特定の問題があると思います。
Super + x、Super + c、Super + vの形式のいくつかのシーケンスのみをCtrl + x、Ctrl + c、Ctrl + vなどの他のシーケンスにバインドする場合は、たとえば(OPとして)これらを特定のスーパーキーシーケンスは、通常、システムでのスーパーキーの他の使用に影響を与えることなく、カットアンドペーストにマップされます。XKB拡張のみを使用することも可能です。以下の手順では、手順の概要を説明し、2つの異なる開始キーボード設定の詳細の2つの異なる例を示します。うまくいけば、あなたのシステムに適応するのに十分な情報が得られるでしょう。 /usr/share/X11/xkb
などのシステムの場所にあるファイルを含め、システムでのファイルの作成と編集に慣れていることを前提としています。
XKB構成ツリーを配置する場所を決定します。最初にシステム1を見つけます。通常は/ usr/share/X11/xkbにありますが、そこにない場合の検索方法はよくわかりません。 「xkb」という名前のディレクトリをシステムで検索するだけです。とにかく、それを見つけたら、システムをその場で変更するか、任意のディレクトリを使用できます。システムディレクトリを使用する利点は、変更をはるかに簡単に呼び出すことができることですが、欠点は、将来のシステム更新によって変更が上書きされる可能性があることです(警告されています)。いずれにせよ、以下で説明するすべてのファイル名はこのディレクトリを基準にしています。このディレクトリを必要に応じて$ XKBLOCAL $と呼びます。すべてのコマンドは、それが現在のディレクトリであると想定しています。
現在のx、c、vキーのキーのXKB「タイプ」を判別します。これを行う最も簡単な方法は、コマンドxkbcomp -a $DISPLAY - | grep -C 6 c,
を使用することです(コンマがパターンに意図的に含まれていることに注意してください)。私の最初の設定例では、これは以下を生成します:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
私の他の例のセットアップではこれにより
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
最初の例では、関連するキーのタイプは「ALPHABETIC」ですが、2番目の例では、タイプは「FOUR_LEVEL」です。キーボードの設定によっては、まったく別のタイプである場合があります。以下では、タイプは$ TYPE $と呼ばれ、実際の文字列ALPHABETICまたは以下のコマンドの任意の文字列で置き換える必要があります。
$ TYPE $の定義を見つけて、$ XKBLOCAL $/typesディレクトリの新しいファイルにコピーします。これを行うコマンドは次のとおりです:xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
。私が選択した「カットペースト」ファイルの名前は任意です。好きな名前を使用してください。ただし、後の手順でこのファイルを一貫して参照する必要があることに注意してください。最初のセットアップでは、このファイルは内容を取得します
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
他の例では、コンテンツを取得します
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
ファイルタイプ/カットペーストを編集して2つのことを行います。適切なXKB句にするプリアンブルとポストアンブルを追加し、タイプ名とタイプ定義を変更して、Superに対応する修飾子によって生成されるレベルを1つ追加します。その修飾子がシステム上にあるかどうかを確認する必要があります。以下で使用されるMod4である可能性があります。必要な変更は、types/cutpasteの2つの最終バージョンの例から明らかです。
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
そして
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
2番目のステップでgrepによって出力されたキーシンボル定義を2番目の新しいファイルシンボル/カットアンドペーストにコピーし、同様のプリアンブルとポストアンブルを追加し、新しいタイプを使用するように定義を変更し、目的のキーを処理する定義にアクションを追加します。スーパーバージョンによって生成されます。この2つの例での結果は次のとおりです。
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
そして
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
2番目の例では、行の長さを少し制御できるように、(重要ではない)空白の一部も絞り込んだことに注意してください。
XKBが現在使用しているルールセットの名前を見つけます。簡単です。setxkbmap -query
の結果に表示されます。私の場合、それは「evdev」でした。
Rules/evdevのシステムバージョン(またはルールセットの名前は何でも)を$ XKBLOCAL $/rules/evdevにコピーし、作成したオプションを指すルールを追加します。ここでは2つの選択肢があります。evdevのすべてをコピーするか、実際に使用しているキーボードモデル、レイアウト、バリアント、オプションに言及している部分だけをコピーできます。もちろん、システムファイルを適切に変更する場合は、コピーする必要はなく、編集するだけです。
この場合、追加される内容はキーボードの初期設定に関係なく同一であるため、例は1つだけです。ルールファイルの! option = symbols
で始まるセクションを見つけて、そのセクションにcutpaste:super = +cutpaste
という行を追加します。また、ルールファイルの! option = types
で始まるセクションと行も見つけますcutpaste:super = +cutpaste
もそのセクションに追加します。
Evdev.lstのシステムバージョンをコピーし、新しいオプションの行を追加します。このファイルの名前は、.lstが追加されたルールファイルの名前に対応していることに注意してください。前のステップと同様に、ファイル全体をコピーするか、使用しているモデル、レイアウト、バリアント、およびオプションによって参照される部分のみをコピーできます。このファイルの! option
で始まるセクションを見つけて、そのセクションにcutpaste:super Add super equivalents of cut and paste operations
のような行を追加するだけです。
OK、これですべての構成ファイルが配置されました。システムファイルを変更した場合は、setxkbmap -option cutpaste:super
を使用して新しいオプションを呼び出すことができます。一方、そうしなかった場合は、$ XKBLOCAL $ディレクトリの場所をsetxkbmapに知らせる必要があります。さらに悪いことに、サーバーはそのディレクトリがどこにあるかを知らず、setxkbmapはそれを知らない(または、最終的にサーバーが別のマシンで実行されている可能性があるので、それができない)。そのため、setxkbmapの出力をxkbcompにパイプし、そのコマンドに$ XKBLOCALディレクトリの場所を伝える必要があります。したがって、完全なコマンドラインはsetxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
です。
うまくいけば、決定的なXKBの適切なドキュメント/参照が不足しているため、これは誰かにとって役立つ/興味があることです。 1つの非常に役立つ参照は http://madduck.net/docs/extending-xkb/ でした。
これが私がすることです。それは究極の解決策ではありませんが、私は究極の解決策を達成しようとしましたが、多くの努力の後にそこに到達できませんでした。だから私はシンプルで、必要なものの90%以上で機能するものに落ち着きました。行くコンピュータ(または新しいLinuxインストール)にほんの数分で実装できます。とても簡単です。
Xターミナルアプリケーションで、ショートカットの設定を行います。私はGnomeとKDEの両方でこれを行いました。たとえば、Konsoleでは、[メニュー]> [設定]> [ショートカットの構成]に移動します。 Gnome X端末にも同様のメニューがあります。ショートカット(「コピー」など)を選択して、目的のキーシーケンスを入力するだけです。
端末のコピーと貼り付けのショートカットが端末のコマンドと競合する場合は、簡単に修正することもできます。たとえば、コピーにCTRL-Cを使用したい場合(X端末がCUA標準に準拠している場合)はどうなりますか?
その場合、styキーバインディングを(.bashrcで)簡単に変更できます。コピー例のCTRL-Cを続けて、割り込みキーをCTRL-b(「ブレーク」用)にしたいとします。これはそれを達成します:
echo "stty intr \^b" >> ~/.bashrc
次に、.bashrcをソースします。
ソリューション全体は、X端末設定を使用してショートカットを変更し、必要に応じて、1行のechoコマンドでsttyとの競合を解決するのと同じくらい簡単です。非常にシンプルで、必要なほぼすべてをカバーしています。
2020年2月3日更新
Kinto-MacのようにLinuxに入力します。
端末のSuperをCtrl + Shiftにバインドしているにもかかわらず、この最新のアップデートは、元の作成者が取り組んでいた問題をより適切に処理すると思います。
Kintoはx11を使用するUbuntu/Debianシステム用にCで書き直されました。また、json設定ファイルを使用するため、端末だけでなく、管理や他のアプリケーションへの拡張が容易になります。ターミナルアプリでは、アプリはSuperにマップされなくなりました。Ctrl+ Shiftに正しくマップされ、Cmdキーを持つのとまったく同じ感覚を作成します。
最新のリリースをチェックアウトしてください。 https://github.com/rbreaves/kinto
Super = Ctrl + Shiftの変更を可能にする主な変更は、このシンボルファイルにあります。
default partial xkb_symbols "mac_levelssym" {
key <LWIN> {
repeat= no,
type= "ONE_LEVEL",
symbols[Group1]= [ Hyper_L ],
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
};
key <RWIN> {
repeat= no,
type= "ONE_LEVEL",
symbols[Group1]= [ Hyper_R ],
actions[group1]=[ SetMods(modifiers=Shift+Control) ]
};
};
グレンホイットニーが言ったことのいくつかを取り上げ、その知識を使用して、macOSからカスタムキーマップに単語の悪い動作やテキスト操作の動作をマッピングしました。
CtrlとSuperのコピーと貼り付けの問題は、その特定のソリューションを使用せずに解決済みですが、他の点で非常に役に立ちました。また、ある時点でWaylandを完全にサポートすることを目指しているので、xmodmapのようなものも避けました。 Kintoはネイティブのxkbを使用し、予想されるmacOSのような端末の動作を尊重します。
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 the hid_Apple driver is not loaded for Apple keyboards, which can be found out
# by the lsmod command then the above setxkbmap commands will not work
# Use the following commands for Apple style keyboards without an hid_Apple driver
#
# Note: this could also apply to hid_Apple driver as well
# if this option is set to 0 inside swap_opt_cmd
#
lsmod | grep hid_Apple
# Apple keyboard without hid_Apple - GUI
setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl,ctrl:swap_rwin_rctl
# Apple keyboard without hid_Apple - Terminal
setxkbmap -option;setxkbmap -option altwin:alt_super_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!
#
おそらくWindowsキーは修飾キーです。これを実行して再試行してください:
xmodmap -e 'remove Mod4 = Super_L'