問題タブ [xlib]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x11 - X11:重力/方向を90度に回転させる方法
すべてのXベースのアプリの向きを90度に回転させることが可能かどうかを知る必要があります。ソースを変更せずに。X11にはこのための構成オプションが必要だと思います。では、これを行う方法は?
x11 - タッチスクリーンの相対座標
タッチスクリーンデバイスでxrandr-oleft | right | inverse|normalを使用してX環境を回転させました。タッチ以外はすべて正常に機能しています。画面上で指を動かすと、指の絶対座標を取り、回転が逆の場合はカーソルを反対方向に動かします。ですから、実際に上にスライドすると、下にスライドします。したがって、絶対座標ではなく相対座標を読み取るようにタッチスクリーン入力を構成する方法はありますか。タッチスクリーンドライバーはevdevです。
よろしく、リーヴォン
c - Motifを使用して'97Cコードをコンパイルする方法は?
こんにちは私は1997年に書かれた約30のCソースをコンパイルしようとしています。XmAll.hやXlib.hなどの必要なヘッダーファイルと「ウィジェット」構文の使用に基づいて、これらのソースはMotifプログラミングツールキットに依存していることがわかりました、したがって、LinuxまたはUnixシステムでコンパイルする必要があるようです。
X WindowsプログラミングとMotifプログラミングの経験はありませんが、コンパイルする必要があります。私は実際にMacOSXまたはWindowsでそれらをコンパイルしようとしましたが、もちろんそれは機能しませんでした。
最初にLinuxを仮想OSとしてインストールし、それにOpen Motifをインストールしてコンパイルする必要がありますか?他に何か提案はありますか?
どうもありがとう!
キュ
x11 - X11アプリをDbusに接続する方法
X11アプリケーションでDBusシグナルをリッスンする方法。Dbusシグナルをリッスンするためにgmainloopを起動する必要があり、X11アプリの場合はXEventループを起動する必要があります。それで、これを行うためのエレガントな方法はありますか?または、別のスレッドでgmainloopを実行する必要がありますか?
よろしく、リーヴォン
c++ - C ++ ubuntuのEclipseでXlibコードを機能させる方法
Xlib 用に次のヘッダーを含むコードをいくつか持っていますが、それを機能させるために何をすればよいかわかりません...これらのヘッダーが見つかりません。
申し訳ありませんが、これは初めてです..さて、Eclipse IDEのfoldrrsのヘッダーを表示できるようになりました。そして、次のエラーが表示されます。友人が端末から実行したため、ソースに問題はありません。Eclipse IDEから実行したいです。
関数main':
/home/abbas/workspace/test3/Debug/../src/test3.cpp:51: undefined reference to
XOpenDisplay' 内
および同じタイプの他の多くのエラーですが、機能は異なります。
collect2: ld が 1 の終了ステータスを返しました make: *** [test3] エラー 1
ぜったい!
c - X11: アプリケーションを最上位にする方法
状況 X11 ベースのアプリケーションであるマッチボックス キーボードを使用しています。アプリケーションがフル スクリーン モードの場合、フル スクリーン アプリケーションが TOP にあるため、マッチボックス キーボードが表示されません。フルスクリーンのアプリケーションで X11 ベースのアプリケーションを起動する方法はありますか?
pointers - 一部のキーボード/マウス イベントをキャッチできない - xlib プログラミング
このプログラムに問題があります。システムで実行されている現在のウィンドウとそのウィンドウ ID を一覧表示します。
結果として、入力した特定のウィンドウ ID に対して、奇妙な結果が得られました。firefox や gedit などのアプリケーションでは、モーション通知イベントのみが機能し、他のイベントは機能しません。
私の端末(bash)では、キーを押す、キーを離す、マウスに通知する、マウスを離すなど、すべてが機能します...
これはなぜですか?
linux - Linuxでのキーボードイベントのドロップ/書き換え/生成
Linuxでキーボード(make / break)イベントをフックし、インターセプトし、生成してから、アプリケーションに配信したいと思います。より正確には、キーイベントストリーム内のパターンを検出し、検出されたパターンに応じてイベントを破棄/ストリームに挿入できるようにしたいです。
SOに関するいくつかの関連する質問を見ましたが、次のとおりです。
- キーイベント(キーロガーなど)を取得する方法のみを扱い、それらの伝播を操作する方法は扱いません(リッスンするだけで、傍受/生成はしません)。
- または、Xでパッシブ/アクティブグラブを使用します(詳細については、以下を参照してください)。
小さなDSL
以下で問題を説明しますが、もう少しコンパクトでわかりやすくするために、最初に小さなDSL定義を使用します。
A_
:make(押す)キーAの場合A^
:ブレーク(リリース)キーAの場合A^->[C_,C^,U_,U^]
:A^
CとUのmake / breakコンボを処理チェーンのさらに下流に(そして最後にアプリケーションに)送信します。ない場合は->
何も送信されません(ただし、後続のイベントを検出するために内部状態が変更される場合があります)。$X
:任意のアクションを実行します。これは、いくつかの構成可能なキーイベントシーケンス(おそらくC-x C-s
emacsのようなもの)を送信するか、関数を実行することができます。キーイベントのみを送信できる場合は、アクティブなアプリケーションに応じてウィンドウマネージャーでこれらをさらに処理できるため、これで十分です。
問題の説明
さて、この表記法で、検出したいパターンと、処理チェーンに渡したいイベントを次に示します。
A_, A^->[A_,A^]
:expl。上記を参照してください。送信はで行われることに注意してくださいA^
。A_, B_, A^->[A_,A^], B^->[B_,B^]
:基本的に1と同じですが、重複するイベントによって処理フローが変更されることはありません。A_, B_, B^->[$X], A^
:別のキーが保持されている間に(B)キーの完全なメイク/ブレークがあった場合(A)、Xが実行され(上記を参照)、Aのブレークは破棄されます。
(これは原則として、キーイベント上に実装された単純なステートマシンであり、出力として(複数の)キーイベントを生成できます)。
その他の注意事項
- ソリューションはタイピング速度で機能する必要があります。
- 変更されたキーイベントストリームのコンシューマーは、Linux上のXで実行されます(コンソール、ブラウザー、エディターなど)。
- キーボードイベントのみが処理に影響します(マウスなどはありません)
- マッチングは、keysyms(少し簡単)またはkeycode(少し難しい)で発生する可能性があります。後者の場合、コードからkeysymに変換するには、マッピングを読み取る必要があります。
- 可能であれば、USBキーボードと仮想マシン内の両方で機能するソリューションをお勧めします(ドライバーレイヤーで作業している場合は問題になる可能性がありますが、他のレイヤーでも問題ありません)。
- 私は実装言語についてかなりオープンです。
考えられる解決策と質問
したがって、基本的な質問は、これをどのように実装するかです。
XGrabKey
パッシブグラブ( )とを使用してウィンドウマネージャーにソリューションを実装しましたXSendEvent
。B^
残念ながら、パッシブグラブは、上記の2番目のパターンでは正しくキャプチャされないため、この場合は機能しません。その理由は、変換されたグラブがで終了しA^
、継続されないためB^
です。新しいグラブは、保持されている場合はキャプチャBに変換されますが、約1秒後になります。それ以外の場合は、プレーンB^
がアプリケーションに送信されます。これはで確認できますxev
。
アクティブなグラブ(XGrabKeyboard
)を使用するように実装を変換することはできますが、ウィンドウマネージャーが常にキーボードにアクティブなグラブを持っている場合、他のアプリケーションへの影響についてはわかりません。Xのドキュメントでは、アクティブグラブは煩わしく、短期間の使用向けに設計されていると言及しています。誰かがこれを経験していて、長期のアクティブグラブに大きな欠点がない場合、私はこれを解決策と見なします。
ウィンドウマネージャー(Xクライアントとして動作する)以外の主要なイベント処理の他のレイヤーを見ていきたいと思います。キーボードドライバまたはマッピングは、上記の問題を解決できる限り可能です。これは、ソリューションが個別のアプリケーションである必要がないことも意味します。ドライバーまたはカーネルモジュールにこれを実行してもらっても問題ありません。ただし、カーネルやドライバーのプログラミングは行ったことがないので、いくつかの優れたリソースをいただければ幸いです。
ポインタをありがとう!
keyboard - XGrabKeyboardから一部のキーを除外する
処理のためにすべてのウィンドウマネージャーコマンド(Alt + F4など)をキャプチャするために、フォーカスされたときにキーボードをつかむことが望ましいアプリケーションを考えてみます。さて、これには、キーボードをつかんだときにユーザーがキーボードを介して別のアプリケーションや仮想デスクトップに切り替える方法がないという欠点があります。グラブから除外されるキーの組み合わせ(たとえば、仮想デスクトップを切り替えるためのキーの組み合わせ)のユーザー定義のホワイトリストが欲しいのですが。
私は2つの可能なアプローチを考えることができます。ホワイトリストに登録されたキーイベントが到着すると、
- どういうわけか、Xに通常どおり処理を続行するように指示します。これはより自然な方法のように聞こえますが、これを行う方法が見つかりません、または
- キーボードのグラブを解除し、イベントを手動でウィンドウマネージャーに再送信して処理しますが、送信先(ルートウィンドウ?)や、それでも機能するかどうかはわかりません。
誰かがそれらの空白を埋めることができますか?他に何か提案はありますか?
グラブからキーを除外する方法がない場合は、押されたときにキーボードをアングラブする「エスケープキー」を用意する必要があると思います。ただし、ユーザーはそれとウィンドウマネージャーコマンドの両方を押す必要がありますが、これはそれほど良いことではありません。
x11 - Xlib でのウィンドウの位置
単純な古い xlib (または真新しい XCB) を使用して、ルート ウィンドウ (つまり、画面全体) に対するトップレベル ウィンドウの位置を取得する方法は?