問題タブ [xcb]
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 - Xlib でのウィンドウの位置
単純な古い xlib (または真新しい XCB) を使用して、ルート ウィンドウ (つまり、画面全体) に対するトップレベル ウィンドウの位置を取得する方法は?
deadlock - xlib/ xcb デッドロックまたはブロック
xlib と cairo を使用してプログラムを開発しました。参考までに、cairo と xlib の呼び出しを混在させていますが、それがエラーの原因であるかどうかはわかりません。状況によっては、デッドロックまたはブロックが発生します。xlib で動作する 3 つのスレッドがあります。1 つは xlib と cairo の両方を呼び出すメインの UI スレッドで、もう 1 つは XClientMessage を送信するためだけにそれを使用し、3 番目は XCopyArea のような xlib 呼び出しを行い、最後に XClientMessage を送信します (これらはいくつかのアニメーション用です)。プログラムの冒頭で InitThreads を呼び出しました。また、すべての xlib 呼び出しを XLockDisplay で保護しました (cairo 呼び出しも XLockDisplay で保護されています)。ubuntu 10.10 を使用しています。スタック トレースは次のとおりです。
(gdb) スレッド 1
__kernel_vsyscall () の 0
/lib/tls/i686/cmov/libc.so.6 からの poll ( ) の 1
?? の 2 () /usr/lib/libxcb.so.1 から
3 in ?? () /usr/lib/libxcb.so.1
から xcb_writev で 4 () /usr/lib/libxcb.so.1 から _XSend () で
5 /usr/lib/libX11.so.6 から _XEventsQueued () で
6 /usr/lib/libX11.so.6 から
7 XPending () から /usr/lib/libX11.so.6
(gdb) スレッド 6
0 __kernel_vsyscall ()
で 1 __lll_lock_wait () から
/lib/tls/i686/からcmov/libpthread.so.0
2 in _L_lock_752 () from /lib/tls/i686/cmov/libpthread.so.0
3 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
4 in ? ? () /usr/lib/libX11.so.6 から
/usr/lib/libX11.so.6
(gdb) の XLockDisplay () の 5 (gdb) スレッド 7
__kernel_vsyscall () の 0
__lll_lock_wait () の 1 /lib/tls/i686/cmov/libpthread.so.0 の
2 __L_lock_752 ( ) /lib/tls/i686/cmov/libpthread.so.0 から
3 で pthread_mutex_lock () /lib/tls/i686/cmov/libpthread.so.0 から
4 ?? () /usr/lib/libX11.so.6 から
5 in XLockDisplay () /usr/lib/libX11.so.6 から
スレッド 1 はメインの UI スレッドで、現在イベント ループで XPending を呼び出しています (すでに XLockDisplay を呼び出しています)。 XSendMessage を呼び出します (スレッド 1 が終了するのをスレッド 7 と共に待機しています)。しかし、スレッド 1 は決してポーリングから戻らないようです。関連性があるかどうかはわかりませんが (Linux や libc の専門家ではありません)、別のスレッドがポーリングで待機しています (これは TCP/IP ネットワーク通信用のスレッドです) (gdb) thread 2
0 in /lib/tls/i686/cmov/libc.so.6 からの__kernel_vsyscall ()
poll () の 1
同様のデッドロック/ブロックを経験した人はいますか? これは xcb のバグでしょうか? xcb なしで xlib をコンパイルしてみる価値はありますか? ありがとう
python - Window Manager は ConfigureRequestEvent で何をすべきですか?
私の罪のために (そして学習体験を楽しむために)、私はウィンドウ マネージャーを作成しています (私は知っています、知っています)。
Python と XCB (python-xpyb) を使用しています。
これまでのところ、ルート ウィンドウで SubStructureRedirect マスクを使用する必要があることがわかっており、アプリケーションのトップレベル ウィンドウに関連するイベントが正常に渡されています。xterm を起動してこれをテストしています。
ConfigureRequestEvent を取得し、その後一時停止し、さらに別の ConfigureRequestEvent、さらに MapRequestEvent を取得します。
MapRequestEvent を取得したら、 を呼び出しますconnection.core.MapWindowChecked(e.window)
。これは機能しますが、1 ピクセルまたは 2 幅/高さのウィンドウをマップします。
私の質問は、ウィンドウを正しいサイズにするために ConfigureRequestEvent で何をすべきかということです (それが不足していると仮定して)。
より正確には、私は正確に何と呼んでいますか? MapWindowChecked は当然の選択でしたが、幅/高さを実際に構成する方法が見つからないようです。私はそれがConfigureWindowだと推測していますが、受け入れる引数は私にはわかりにくいようです。前回呼び出したときは xcb.xproto.CW.EventMask を使用しましたが、CW のどのフラグも幅/高さに関連しているようには見えません。
PS このすべてに関するドキュメントは、私には非常にわかりにくいようです。xcb を使用していると思われる 2 つの Python ウィンドウ マネージャーを見てきましたが、それらは追加機能を備えた独自のカスタム バージョンを使用しているようです。また、実行中のウィンドウ マネージャー (デバッガーのウィンドウのマッピングも担当) の検査/デバッグは PITA であるため、ここで質問します。おそらく、2 台のマシンまたは VM などを使用する方がよいでしょう。
ありがとう。
python - Xorg でウィンドウのアイコン名を取得するにはどうすればよいですか?
pyclutter ベースのタスクバーで使用するために、python でウィンドウのアイコン名を取得しようとしています。wnck 経由で XID を取得しましたが、wnck は gtk.gdk.Pixbuf しか提供できないようです。これはクラッターには役に立ちません。python-xlib または python-xcb でこれを行う方法があると確信していますが、見つかりません:-)
何か案は?
linux - XCBの閉じるボタンでプログラムを終了する方法
「X」ボタンでアプリケーションを閉じる方法についての参照が見つかりません。XCBを使用してプログラミングしていて、「X」ボタンでプログラムを閉じたい。私はそれについて何も見ませんでした。ボタンを押して閉じる方法を知っています。また、「X」ボタンを押すと、ウィンドウは閉じているように見えますが、閉じていません。
c++ - XCBを使用してキーイベントをアプリケーションに送信するには?
を使用して別のプログラムからウィンドウ (現在アクティブなウィンドウ) にキーの押下またはキーの解放イベントを送信するにはどうすればよいXCB
ですか?
を使用したチュートリアルをいくつか見つけましXLib
たが、使用したいと思いますXCB
。
を呼び出す必要があると思いますがxcb_send_event
、パラメーターとして何を渡すかわかりません。
linux - XCB は本番環境で使用する準備ができていますか? 代わりに Xlib を使用する必要がありますか?
GTK、QT などを使用せずに X11 イベント、ウィンドウ処理、および入力への低レベル アクセスが必要な場合、Xlib またはXCBを使用する必要がありますか? それぞれの長所と短所は何ですか?
linux - X11 では、特定のイベントを無視してユーザーの時間を「キーボードから」離すにはどうすればよいですか?
私は、キーボードやマウスを使用していないなど、ユーザーがアイドル状態であった時間を知る必要がある小さなアプリケーションを作成しています。XCB と Xlib はどちらも、それぞれのスクリーンセーバー拡張機能を使用してアイドル時間を提供してくれると約束しています。XCB でアイドル時間を取得する場所は次のとおりです。
ただし、これは "ms_since_user_input" が示唆するものとは大きく異なる動作をしています。ビデオを見ている場合 (Totem でテスト済み)、アイドル時間は例外なく 30 秒以内に 0 にリセットされます。同じことが多くのゲームで発生し、一時停止しているときでもこれが発生します! XLib を使用すると、まったく同じ動作が得られます。
アイドル時間を使用するコードを改善して、この動作がそれほど問題にならないようにできるかもしれませんが、問題を完全に取り除きたいと思っています。最後のユーザー入力イベント (および最後のユーザー入力イベントのみ) からの時間のみを取得していればよいと思います。私のプログラムが大量のトラフィックを生成しない限り、そこに到達するために他のライブラリを使用してもかまいません。
これをどのように行うことができるかについてのアイデアはありますか?
xcb - xcb は疑似透過性を示します (子ウィンドウの背景へのルート ウィンドウのピックスマップのコピー)
xcb を使用してウィンドウの疑似透過性を説明したい (ウィンドウの背景にルート ウィンドウのピックスマップの一部をコピーする)
そのために、私は以下を使用します:
ルート pixmap は feh で設定され、プログラムを起動します (コードの一部):
->接続の初期化:
-> ウィンドウを作成します。
-> xcb イベントを取得:
-> map_request_event (ウィンドウのリクエストの場合) または property_notify (変更されたプロパティが feh 経由のルート ピックスマップの場合) への応答:
ルート ピックスマップを取得します。
ルート ピックスマップの一部をウィンドウ ピックスマップにコピーします。
xcb_request_check を使用していますが、この最後のリクエストにはエラーがないようです。
次に、カイロを使用してウィンドウに要素を描画します。
問題は、要素がカイロによって描画された白いウィンドウが表示されることです。カイロ要素がなくても、ウィンドウのコピーされたピックスマップを表示できません。
私を助けるアイデアはありますか?ありがとう
ruby - swig xcb lib と ruby
自分で使用する xcb の基本的な ruby モジュールを作成したいと考えています。ヘッダーファイルをswigでラップする基本的なテストを試みました:これが私のxcb_ruby.iです
irbで試してみると、接続を初期化するために接続でき、この接続から情報を取得できますが、RubyインターフェースはCのようです。よりオブジェクト指向のインターフェースが欲しいです。
たとえば、xcb.h には次のようなものがあります。
メソッド new/connect()、flush()、generate_id()、および disconnect() を持つ Connection クラスが必要です。これが私の新しい xcb_ruby.i です。
C ファイルを生成した後にコンパイルしようとすると、エラーが発生します: エラー: 不明な型名 '接続'</p>
誰かが私が間違っている場所を教えてもらえますか?
ありがとう
編集
いくつかの変更を行い、コンパイルできるようになりましたが、まだいくつかのエラーが発生します。
これで、モジュールをコンパイルして使用できます。
しかし、別の方法を試すと、エラーが発生します。
メソッドは存在するようですが、メソッドに引数を渡すときにまだ問題があります。
何か案は??