Super を Ctrl にバインドする
左の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 が回答で示唆しているように、終了を別のショートカットに再バインドします。
XF86Copyなどが動かない
コピー アンド ペーストのキー シンボルについて:どうやら効果はありません。コピー アクションを 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";
};
ファイル タイプ/カットペーストを編集して、適切な 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 番目の新しいファイル symbols/cutpaste にコピーし、同様のプリアンブルとポストアンブルを追加し、新しいタイプを使用するように定義を変更し、定義にアクションを追加して、目的のキーを処理します。スーパーバージョンによって生成されます。この 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 つの選択肢があります。すべての ofevdev をコピーするか、実際に使用しているキーボード モデル、レイアウト、バリアント、およびオプションに言及している部分だけをコピーできます。もちろん、システム ファイルをその場で変更する場合は、コピーする必要はなく、編集するだけです。
この場合、キーボードの初期設定に関係なく、追加される内容は同じであるため、例を 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
で呼び出すことができます .一方、そうでない場合は、setxkbmap に $XKBLOCAL$ ディレクトリの場所を知らせる必要があります。さらに悪いことに、サーバーもそのディレクトリがどこにあるかを認識しておらず、 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 標準に準拠するようにするため) はどうすればよいでしょうか?
その場合、(.bashrc で) stty キー バインドを簡単に変更できます。コピーの例で CTRL-C を続けると、割り込みキーを CTRL-b (「ブレーク」) にしたいとします。これにより、次のことが達成されます。
echo "stty intr \^b" >> ~/.bashrc
次に、.bashrc をソースします。
ソリューション全体は、X 端末の設定を使用してショートカットを変更し、オプションで、1 行の echo コマンドで stty との競合を解決するのと同じくらい簡単です。非常にシンプルで、私が必要とするほとんどすべてをカバーしています。