これらのxteコマンドが端末で機能するのに、xbindkeysでバインドされている場合は機能しないのはなぜですか?


18

このxteコマンドをターミナルで実行すると、Expoモードがトリガーされます。

xte 'keydown Super_L' 'key S' 'keyup Super_L'

ただし、これを私の.xbindkeysrcファイルに入れると:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

ボタンをクリックしても何も起こりません。次のバインドにより、ボタン11を押したときに文字Xがコンソールに表示されます。

"xte 'key X'"
  b:11

では、なぜExpoバインディングが機能しないのでしょうか?


これは、xbindkeys -n -vボタン11をクリックしたときの詳細な出力です。

ボタンを押す!
e.xbutton.button = 11
e.xbutton.state = 16
「xte 'keydown Super_L' 'key W' 'keyup Super_L'」
    m:0x0 + b:11(マウス)
ウィンドウ2bbの画面0を取得しました
fork + exec呼び出しでプログラムを開始
ボタンリリース!
e.xbutton.button = 11
e.xbutton.state = 16

そして、何も起こりません。これxbindkeysは、コマンドの実行方法と関係がありますか?(fork + exec呼び出し)


2番目の試み。

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

コマンドラインからこのスクリプトを実行すると、Expoがアクティブになります。xbindkeysにバインドします:

"sh ~/expo.sh"
  b:11

マウスボタン11のクリック:

ボタンを押す!
e.xbutton.button = 11
e.xbutton.state = 16
「sh〜/ expo.sh」
    m:0x0 + b:11(マウス)
ウィンドウ2bbの画面0を取得しました
fork + exec呼び出しでプログラムを開始

何も起こりません!


1
<Super> <S>を押しますか?私はxbindkeys + xteが時々うるさいことを知っています。
セス14

@Seth:正しい。好き嫌いを回避する方法はありますか?
ウブロ14

1
試してください'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'
セス14

@Seth:違いはありません。私は恐れています:(
Hubro 14

変更を行った後、xbindkeysを再起動しましたか?時にはそれが必要です。あなたの最終的な目標は、ワークスペースの概要を開くことです。
セス14

回答:


17

別のより簡単なソリューション:xbindkeys定義で「b:11」を使用する代わりに、「b:11 + release」を使用します。ボタンを放してコマンドを実行するまで待機します。

例:

"sh ~/expo.sh"
  b:11 + release

2
Hubroはここに戻ってきて正解...としてこれをマークする必要があります
デヴィッドLjungマディソンステラ

7

これは非常に奇妙です。Super+Wキーストロークがシミュレートされているときにマウスボタンがまだ押されている(まだ離されていない)場合、何も起こりません。誰のせいなのかわからない(おそらくシナモン?)。xteコマンドに短い遅延を追加することで、私はそれを回避しました:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

シミュレートする前に0.1秒待機するようになりましたSuper+S。マウスボタンを0.1秒以上押し続けても、何も起こりません。

これは回避策の回答です。適切な回答を希望します。


Hubro、user215129によるより高い評価の回答を参照して、正しいとマークしてください
デビッドLjungマディソンステラ

1
@DavidLjungMadisonいいえ。これは私の質問への答えではなく、回避策の提案にすぎません。
ウブロ

1
答えを理解できたのだろうか。問題は、ボタンがまだ押されている間にキーを送信しようとしていることです。ボタンがリリースされるのを待つことは、ボタンがリリースされるまでキーを送信しないことを意味し、それによって問題を解決します。回避策ではなく、問題の説明とそれを解決する方法です。
デビッドLjungマディソンステラ

1
その後、あなたはまだ理解していません。問題は、あなたがボタンを押している間、キーを入力しようとしているということで、何が万博スーパー-S、ないBTN-2 +スーパー-Sを探して起動します。修正、ボタンが確実に動作するようにすることで問題を解決せず、多くの状況で機能しないため、回避策です。解決策は、(マウスイベントを処理する場合によくあることですが)コマンドをトリガーする前にボタンのリリースを待つことです。これにより、ボタンがキーストロークと混ざらないようになります。
デビッドリュングマディソンステラ

2
user215129の回答が実際に正しくなく、質問に回答していないことを確認できます。今すぐこの問題について独自の調査を行い、私の場合はリリースまたは遅延に変更することはオプションではありません。ボタンが押されている間にアクションを実行する必要があるためです。参照:askubuntu.com/questions/984054/...
Ethuil UI

2

私は同じ問題に直面しました。

"xte 'key b'"

コンソールで機能していましたが、xbindkeysパラメータファイルでは機能していませんでした。bを彼のキーシムコードで変更し、「xev」コマンドを使用して取得しました。

"xte 'key Ox62'"

それは私のために働いた



1

sxhkcdキーマッパーの使用中にも同様の問題が発生します。実際のショートカットキーは、まだ押されていることが検出されます。

いくつかの半回避策があります。

  • リリースイベントを探す
  • sleep 0.2コマンドの前に追加します
  • リーダーキーでショートカットを使用する
  • xteシーケンスの前でショートカット修飾子を解放します

ただし、=)ではリアルタイムアクションを取得できません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.