web-dev-qa-db-ja.com

Xbindkeysは正常に動作しません

少し問題があります。以前のシステムで使用していたいくつかのホットキーを再マップしたかったのですが、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オプションを持たないよりもはるかに優れていますが、私も使用されているのでそれほど効果的ではありません。たぶん私もこれに対する解決策を見つけるでしょう。

9
Ello

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
4
midenok

別のいくつかのことを試したところ、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オプションを持たないよりもはるかに優れていますが、私も使用されているのでそれほど効果的ではありません。たぶん私もこれに対する解決策を見つけるでしょう。

3
Ello

同様の質問で文書化されているように( これらのxteコマンドは端末で機能するが、xbindkeysでバインドされていないのはなぜですか? )、xbindkeysにイベントをトリガーするよう依頼できますリリース時(キーアップ時):

"xdotool key braceleft"
   Release+Control+Alt + 7

この方法では、ショートカットに使用されるキーと送信されるキーの間に競合はありません。

2
Michaël

なぜxbindkeysで機能しないのかはわかりませんが、書き込むウィンドウを指定する必要があると思います。回避策として、代わりにxvkbdを使用できます。

  1. インストールxvkbd

    Sudo apt-get install xvkbd
    
  2. これを.xbindkeysrcファイルに追加します

    "xvkbd -text '{'"
    Control+Alt + 7
    

うまくいくはずです。


ノート

何らかの理由で、私のマシンでは、xvkbdがメインレイアウト(アメリカ英語)ではなくセカンダリレイアウト(スペイン語)の1つを使用しているため、{が実際に"を印刷します。この問題もある場合は、少し遊んで、使用されているレイアウトで{に対応するキーを見つけてください。または、さらに掘り下げて、xvkbdlocale設定を取得する場所を把握できます。

1
terdon

最近この問題が発生し、Ctrl + Gを使用してメディアの再生/一時停止(XF86AudioPlay)キーをシミュレートしようとしました。いくつかの調査の後、Controlgキー(最初にsleep 0.1遅延が必要なもの)。 xdotool内でkeyupと--clearmodifiersスイッチを使用してこれらのキーの両方をキャンセルすると、機能します。これは、私の.xbindkeys.rcファイル内の新しいコマンドです。

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g
1
QuickishFM