私は知っています Always on visible workspace しかし、いくつかの例外を除いて、allウィンドウを開くときにこれをデフォルトとして使用する必要があります。
私が探しているワークフローは、それが機能する方法のほとんど逆です。いくつかの(手動の)例外を除いて、すべてのワークスペースのすべてを表示します。
出来ますか?スクリプトが必要な場合は、おそらく気にしません。
Ubuntu 17.04でcinnamonを使用していますが、この機能は単一およびほとんどのデスクトップ環境にあります。
興味深いケース。
概念は複雑ではありません。すべてのウィンドウをスティッキーに設定するだけですただし:
wmctrl -l
からの出力として、DOCKやDESKTOPなどのいくつかのウィンドウタイプも表示されますが、これらのプロパティは一般に編集しないでください。以下のスクリプトでは:
次を使用して、2秒サイクルのループが実行され、ウィンドウリストと前のリストが比較されます。
wmctrl -l
その後、各行からウィンドウIDを抽出します
その後、スクリプトが実行されます
xprop -id <window_id>
_NET_WM_WINDOW_TYPE
およびWM_CLASS
に関する情報を見つけることができます
スクリプトは新しく作成されたウィンドウでのみ動作するため、システムに目立った負担をかけることはありません。
#!/usr/bin/env python3
import subprocess
import time
# excluded applications
apps = ["gedit", "chromium", "monkey"]
# ignored window types
ignore = [
"= _NET_WM_WINDOW_TYPE_DOCK",
"= _NET_WM_WINDOW_TYPE_DESKTOP",
]
# just a helper
def get(cmd):
try:
return subprocess.check_output(cmd).decode("utf-8").strip()
except (subprocess.CalledProcessError, TypeError):
pass
# initiate windowlist
wins1 = []
while True:
# cycle time
time.sleep(2)
# initiate new list
new_wins = []
# get the most recent window list
windata = get(["wmctrl", "-l"])
if windata:
# extract window -ids
wins2 = [w.split()[0] for w in windata.splitlines()]
new = [w for w in wins2 if w not in wins1]
# check for excluded classes and window types
for w in new:
testdata = get(["xprop", "-id", w])
if all([
not any([ig in testdata for ig in ignore]),
not any([app in testdata for app in apps]),
]):
# set the passed windows to sticky
subprocess.Popen(
["wmctrl", "-i", "-r", w, "-b", "add,sticky"]
)
# refresh the window list for next cycle
wins1 = wins2
wmctrl
がインストールされていることを確認します。
Sudo apt install wmctrl
set_sticky.py
として保存しますWM_CLASS
-sesを設定します(猿を削除したい場合があります。テスト目的でした:))次のコマンドでテスト実行します:
python3 /path/to/set_sticky.py
すべてが正常に機能する場合は、スタートアップアプリケーションに追加できますが、まだ準備が整っていないデスクトップでスクリプトが破損しないように、小さなブレークを追加してください。
/bin/bash -c "sleep 10 && python3 /path/to/set_sticky.py"
楽しんで :)
Ubuntu Budgie(mutter)で25分間問題なくテストしました。どのウィンドウマネージャーでも正常に動作するはずですが、問題が発生した場合は言及してください。