web-dev-qa-db-ja.com

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

この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バインディングが機能しないのでしょうか?


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

ボタンを押す!
 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呼び出しでプログラムを起動

何も起こりません!

18
Hubro

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

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

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

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

6
Hubro

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

例:

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

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

"xte 'key b'"

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

"xte 'key Ox62'"

それは私のために働いた

2

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

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

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

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

1
Possum Gallo

+ Releaseでお試しください

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

それが役立つかもしれません。

1
Ivan Nikitovic