
この質問は、
- プログラムがワークスペースを切り替えないようにするにはどうすればよいですか?
- アプリケーション (およびそのすべての新しいウィンドウ) を特定のワークスペースにロックするにはどうすればよいですか?
- アプリケーションによるワークスペースの変更を禁止する
- 以前に 2 つのワークスペースにまたがって部分的にドラッグされたウィンドウをアクティブ化するときに、Unity がワークスペースを変更しないようにする方法
ここでの質問は、どのように
- 現在のワークスペースでプログラムを開きます。それはわかっています。
- 別のワークスペースでプログラムを開きます。それはわかっています。
- ウィンドウがワークスペースに移動するのを防ぎます。その処理方法はわかっています。
- アイコンをクリックしたときにワークスペースが切り替わらないようにするか、タスクスイッチャーを使用します。
この質問も Chromium に関するものではありません。Chromium は、誤動作する多くのアプリケーションの中で、最も目立つアプリの 1 つにすぎません。
問題は、別のアプリケーションが直接のユーザー操作なしにフォーカスを自分自身に切り替えようとしたときに (Chromium など)、Wayland が現在のワークスペースを切り替えないようにする方法です。 これはフォーカスの盗難のようなもので、現在のワークスペースで発生すると非常に迷惑です。
Compiz でワークスペースを選択した場合、他のアプリケーションがバックグラウンドで何をしようとしているかに関係なく、別のワークスペースを選択するまでこのワークスペースを変更してはなりません。
Wayland に Compiz や wmctrl などの特定のアプリケーションからの切り替えコマンドにのみ従うように指示する方法はありますか? これは、おそらく、何らかのdbus
フィルターで実現できるでしょうか (CIFS や ZFS などの Linux カーネル モジュールのコードを自分のニーズに合わせてハッキングする方法は知っていますが、Wayland も SystemD もまだよくわかっていません。dbus
申し訳ありません)。 LD_PRELOAD
? 何らかの (既存の) X0 プロトコル ファイアウォール? 何かありますか?
私の現在の回避策は、
while sleep .01; do DISPLAY=:0 wmctrl -s 2; done
こうすることで、Chromium (または他のアプリの 1 つ) がワークスペースを切り替えても、Wayland はすぐに作業中のワークスペースに戻ります。ただし、この切り替えによる 1 分間の安定した画面のちらつきはイライラします。また、ちらつきが原因でマウスのフォーカスが失われることもあります (または、競合状態が露呈したために間違ったデスクトップに何かをドロップするなど、まったく異なることが起こることもあります)。
最も厄介なのは Chromium です。他のほとんどのアプリはワークスペースを 1 回切り替えるだけです。しかし、Chromium は起動時に開くウィンドウごとにこれを実行するようです。私のマシンでは数千のウィンドウが開いているため、Chrome の起動全体に数分かかります (私のマシンには十分な RAM と CPU があるため、これはスワッピングの問題ではありません)。また、起動中は、準備ができるまでワークスペースを着実に切り替えようとします。ただし、この方法で Firefox、IDE、その他のウィンドウがフォーカスを奪うことを防ぐ方法についても疑問があります。
この質問はフォーカス スティール自体に関するものではないことに注意してください。これは、ワークスペースを切り替えることによるフォーカス スティールに関するものであり、これは通常観察されるフォーカス スティールとはまったく異なるものです。
そのため、ウィンドウが飛び回ったり、別のワークスペースに移動したり、現在のワークスペースのフォーカスを奪ったりすることを防止したくありません。そのため、アプリは引き続きウィンドウの配置を台無しにすることができます。
私が望んでいるのは、別のワークスペースに移動することを選択するまで、他の誰もそれを変更できないように、現在のワークスペースを「ロック」することです。
これに関していくつか考えてみましょう:
Wayland は、はるかに大きなキャンバス (すべてのワークスペースを含む) の特定の部分 (ワークスペース) のみを表示します。したがって、ワークスペースを変更すると、キャンバスが表示される原点が変更されるだけです。また、表示はこの原点を基準とした領域です。(もちろん、入力フォーカスも移動する必要があるため、もう少し処理が行われます。)
私の知る限り、オリジンが移動されるのを防ぐのは簡単なはずです (したがって、フォーカスの変更も防ぐことができます)。まさにそれが私がアーカイブしたいことです。おそらくこれはすでに Wayland のどこかに組み込まれているでしょう。あるいは、コードにハッキングされている可能性もあります。ファイアウォールのようなもので、権限のないアプリによるオリジンの変更を防ぐことができます。Wayland でオリジンの変更が行われる正しい場所を見つけることができれば、これを実装できます。
しかし、これを詳しく調べる前に (おそらく数日かかります)、それをアーカイブするためのより良い方法や標準的な方法があるかどうかを知りたいです。
最後にいくつか注意点があります:
私のディスプレイ設定 / ハードウェア / HWE スタックはプレーン X11 ではサポートされていないため、Ubuntu と Wayland を使用する必要があります。(モニターの 1 つを正しく駆動できません。このバグを見つけて修復する能力は私に十分にあると思いますが、そのための時間がありません。)
したがって、Wayland から変更しても、私の側では役に立ちません。もちろん、私は LTS を実行しているので、Ubuntu 22.04 も設定されているため、OS を変更しても役に立ちません。