質問: v v xf86_paste v" 残念ながら、xf86copyとxf86pasteはまったく機能していないようです。それらは/usr/include/x11/xf86keysym.hおよびxevは、キーシーケンスがxによってxf86pasteおよびxf86copyとして解釈されていることを示しています。これらの記号は実際に機能しますか?アプリケーションレベルのサポートが必要ですか?
回答: 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/ でした。