少し問題があります。以前のシステムで使用していたいくつかのホットキーを再マップしたかったのですが、xbindkeys
で正しく動作させることができません。
xbindkeys
は組み合わせを認識しますが、どういうわけかコマンドはトリガーしません。
コマンドを使用する場合
xdotool key braceleft
コンソールに正しい{
サインを出力します。ただし、xbindkeysで同じコマンドを使用しても何も起こりません。コマンドをfirefox
に置き換えると、正しく機能し、Firefoxが開きます。したがって、xbindkeys
が機能すると思います。
私は次を達成したい:
アクティブウィンドウに文字{
を入力したい Alt_R + 7 または Alt_Left+Ctrl+7 両方を使用できます。知っている Alt_R (AltGr)は適切な方法ですが、ドイツ語のキーボードでは、ブレスレフトを AltGr (Alt_R)キーなので、使用する必要があります Alt_L+Control+7 代わりに(以前のシステムで慣れていたように)。私はどういうわけか12.04で正常に動作するようになりましたが、14.04では動作しません。
助言がありますか?いくつかのコマンドを試しました。それらはすべてコンソールで機能しましたが、xbindkeysで実行しても機能しませんでした
xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'
これは私の設定ですが、動作しません
"xdotool key braceleft"
Control+Alt + 7
ただし、これは機能します。
"firefox"
Control+Alt + 7
ソリューション編集
別のいくつかのことを試したところ、xdotoolがすぐにトリガーされるように見えることに気付きました。私はこのように設定を変更しました:
"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
NOWは、アクティブなウィンドウに正しい{記号を送信します。 1秒が少し長すぎるように見えるので、残っているのはスリープと遅延を実行可能な値に減らすことだけです。
**追加情報**さて、今では適切な値を見つけることができました。ただし、スリープ期間が終了するまでキーを離した場合にのみ機能します。動作しない場合は遅すぎる場合。
これはすべての不便なドイツ語AltGr文字の現在の構成です
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q
"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e
"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8
"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9
"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0
"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
ただし、複数の@記号を入力する場合(たとえば)、意図したとおりにCtrl + Alt + Qを押す必要がありますが、すべてのキーを放してからもう一度押す必要があります。ただし、これは、AltGrの代わりにControl + Altオプションを持たないよりもはるかに優れていますが、私も使用されているのでそれほど効果的ではありません。たぶん私もこれに対する解決策を見つけるでしょう。
xdotool
の問題は、実際のキーが押されている間、Xorgがkeypressイベントを繰り返し送信することです(xev
出力を見てください)。これを克服するには、リピート機能を一時的にオフにしてから、ダウンしたキーでKeyReleaseイベントを生成する必要があります。
の代わりに
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
以下を試してください:
"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
Control+Alt + 7
別のいくつかのことを試したところ、xdotoolがすぐにトリガーされるように見えることに気付きました。私はこのように設定を変更しました:
"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
NOWは、アクティブなウィンドウに正しい{記号を送信します。 1秒が少し長すぎるように見えるので、残っているのはスリープと遅延を実行可能な値に減らすことだけです。
**追加情報**さて、今では適切な値を見つけることができました。ただし、スリープ期間が終了するまでキーを離した場合にのみ機能します。動作しない場合は遅すぎる場合。
これはすべての不便なドイツ語AltGr文字の現在の構成です
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q
"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e
"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8
"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9
"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0
"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
ただし、複数の@記号を入力する場合(たとえば)、意図したとおりにCtrl + Alt + Qを押す必要がありますが、すべてのキーを放してからもう一度押す必要があります。ただし、これは、AltGrの代わりにControl + Altオプションを持たないよりもはるかに優れていますが、私も使用されているのでそれほど効果的ではありません。たぶん私もこれに対する解決策を見つけるでしょう。
同様の質問で文書化されているように( これらのxteコマンドは端末で機能するが、xbindkeysでバインドされていないのはなぜですか? )、xbindkeys
にイベントをトリガーするよう依頼できますリリース時(キーアップ時):
"xdotool key braceleft"
Release+Control+Alt + 7
この方法では、ショートカットに使用されるキーと送信されるキーの間に競合はありません。
なぜxbindkeys
で機能しないのかはわかりませんが、書き込むウィンドウを指定する必要があると思います。回避策として、代わりにxvkbd
を使用できます。
インストールxvkbd
Sudo apt-get install xvkbd
これを.xbindkeysrc
ファイルに追加します
"xvkbd -text '{'"
Control+Alt + 7
うまくいくはずです。
ノート
何らかの理由で、私のマシンでは、xvkbd
がメインレイアウト(アメリカ英語)ではなくセカンダリレイアウト(スペイン語)の1つを使用しているため、{
が実際に"
を印刷します。この問題もある場合は、少し遊んで、使用されているレイアウトで{
に対応するキーを見つけてください。または、さらに掘り下げて、xvkbd
がlocale
設定を取得する場所を把握できます。
最近この問題が発生し、Ctrl + Gを使用してメディアの再生/一時停止(XF86AudioPlay)キーをシミュレートしようとしました。いくつかの調査の後、Controlgキー(最初にsleep 0.1
遅延が必要なもの)。 xdotool内でkeyup
と--clearmodifiersスイッチを使用してこれらのキーの両方をキャンセルすると、機能します。これは、私の.xbindkeys.rcファイル内の新しいコマンドです。
"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g