Xbindkeysが正しく機能しない


8

少し問題があります。以前のシステムから慣れているいくつかのホットキーを再マッピングしたかったのですが、で適切に機能させることができませんxbindkeys

xbindkeys は組み合わせを認識しますが、どういうわけかコマンドはトリガーされません。

コマンドを使用する場合

xdotool key braceleft

{コンソールに正しいサインが出力されます。ただし、xbindkeysで同じコマンドを使用しても何も起こりません。コマンドを置き換えてfirefox適切に機能し、Firefoxを開くと、機能すると思いxbindkeysます。

以下を達成したい:

+ または+ +の{どちらかでアクティブウィンドウに 文字を入力したいので、両方を使用できます。私は(AltGr)が適切な方法であることを知っていますが、ドイツ語のキーボードでは、(Alt_R)キーを使用してブレースレフトを入力するのが少し難しいので、代わりに+ + を使用する必要があります(以前のシステムでは慣れていました)。どういうわけか、12.04では正常に機能するようになりましたが、14.04では機能しません。Alt_R7Alt_LeftCtrl7Alt_RAltGrAlt_LControl7

助言がありますか?私はいくつかのコマンドを試しました。それらはすべてコンソールで機能しましたが、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

現在は、アクティブなウィンドウに正しい{記号を送信しています。今残っているのは、スリープと遅延を適切な値に減らすことだけです。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オプションを使用しない場合よりもはるかに優れていますが、私も使用していたのでそれほど効果的ではありません。多分私もこれに対する解決策を見つけるでしょう。


ええ、それは良い発見です!自分の質問に回答するための担当者制限はなく、時間制限のみです。6時間以内に戻ってこれを回答として投稿していただければ幸いです。それが気になれば、それはまたあなたにいくらかの担当者を与えるでしょう。あなたが本当に気にしないなら、私は数日で私の答えにあなたの解決策を含めます。
terdon 2014

xdotool押したままキーを繰り返す方法を理解したことがありますか?
Farzher、2014年

正直なところ、今は試していません。私は、League of Legendsを60fps(12.04ではまったく始まらない)でスムーズに実行できるようにしたので、家にいるときはずっと遊んでいました。
Ello、2014年

数日間ショートカットが機能しませんでした。解決策は簡単でした。私のUbuntuデスクトップには、xbindkeysより前にショートカットがありました。カイボードの設定を編集し、アクション付きの新しいカスタムショートカットを追加しますxdotool getactivewindow key Home
BurninLeo

ドイツ語のキーボードレイアウトをシミュレートしようとしているようです。システム設定でキーボードのレイアウトを切り替えてみませんか?
Rapti

回答:


4

の問題xdotoolは、実際のキーが押されている間にXorgが繰り返しキープレスイベントを送信することです(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

お返事ありがとうございます。私はManjaroをXFCEと一緒に使用していますが、箱から出してすぐに動作するので、睡眠は必要ありません。
Ello

@Ello、これらの答えはあなただけのものではないので、最も普遍的な解決策が高く評価されています。
midenok 2015年

3

別のことをいくつか試しましたが、xdotoolがすぐにトリガーされないようです。私はこのように設定を変更しました:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

現在は、アクティブなウィンドウに正しい{記号を送信しています。今残っているのは、スリープと遅延を適切な値に減らすことだけです。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オプションを使用しない場合よりもはるかに優れていますが、私も使用していたのでそれほど効果的ではありません。多分私もこれに対する解決策を見つけるでしょう。


これは非常に奇妙です。解決できてうれしいのですが、なぜそれが起こっているのか本当にわかりません。とにかく、これを投稿する時間を割いてくれてありがとう、それは同じ問題を持つ次の人を助けるかもしれません。
terdon 2014

の代わりにsleep+ releaseキーコンボに追加したいと思います。これはxbindkeys、コマンドがトリガーされる前にキーが離されるまで待つように指示します。
wjandrea

2

(同様の質問に記載されているように?これらのXTEコマンドは、端末では動作しないのはなぜが、xbindkeysにバインドされていないとき)、あなたは尋ねることができxbindkeysトリガイベントにリリース上(キーアップ時):

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

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


2

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

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

1

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

  1. インストール xvkbd

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

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

うまくいくはずです。


ノート

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


それでも動作しません。適切な文字でも。コンソールでxvkbd -text 'apple'と入力すると、appleが出力されます。xbindkeysを介して実行すると、何も起こりません。xbindkeys -vを見ると、押されたコマンドを認識しています
Ello

私はそれを動作させました、しかし何か他のもので
Ello 2014

@Ello素晴らしい!何を使いましたか?それは私にとってはうまくいきました。あなたの解決策を説明する回答を投稿して受け入れてもらえますか?
terdon 2014

自分の投稿を変更しましたが、評判がないため自分の質問には答えられません。申し訳ありません
Ello
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.