マシンがスタンバイから復帰したときに、ディスプレイポート(MST)を介して接続されたモニターが復帰しないバグが発生していますが、それが点灯した場合、ウィンドウはまだカバーする領域にあります。
この短い再起動から回復する唯一の方法は、ディスプレイを無効にしてから再度有効にすることです。コマンドラインからうまく実行できますが、ディスプレイが無効になると、すべてのウィンドウが残りの画面に再配置されます。
私のスクリプトがこのシーケンスを実行できるように、ウィンドウの位置を保持して復元する方法はありますか-
ステップ2と3は問題なく実行できますが、ステップ1と4では失われます
私はアプリごとにポジションを強制することができることを知っていますが、異なることをして同じアプリを異なるポジションに置くことができるので、それは私が望むものではありません。また、複数の端末を開いており、現在のポジションを何らかの方法で保存して復元する必要があります。
助けていただければ幸いです!
以下のスクリプトを使用して、すべての「通常」ウィンドウの現在のウィンドウ位置を取得(引数-get
で実行)したり、最後のウィンドウ配置を復元(引数-restore
で実行)できます。
説明したように here 、wmctrl
i.c.wを使用します。 Unityにはいくつかの問題があります。それはあなたの状況で満足している場合は決定することです。
スクリプトはwmctrl
を使用します。
Sudo apt-get install wmctrl
次に:
window_arrange.py
として保存します実行者:
python3 /path/to/window_arrange.py -get
現在のウィンドウ配置を「記録」する
python3 /path/to/window_arrange.py -restore
最後の「記録された」ウィンドウ配置を復元する
#!/usr/bin/env python3
import subprocess
import os
import sys
wfile = os.environ["HOME"]+"/.windowlist"
arg = sys.argv[1]
def get(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
def check_window(w_id):
w_type = get("xprop -id "+w_id)
if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
return True
else:
return False
def read_windows():
w_list = [l.split()[:6] for l in get("wmctrl -lG").splitlines()]
relevant = [(" ").join(w) for w in w_list if check_window(w[0]) == True]
with open(wfile, "wt") as out:
for item in relevant:
out.write(item+"\n")
def restore_windows():
try:
wlist = [l.split() for l in open(wfile).read().splitlines()]
except FileNotFoundError:
pass
else:
for w in wlist:
try:
cmd = "wmctrl -ir "+w[0]+" -e 0,"+(",").join(w[2:])
subprocess.Popen(["/bin/bash", "-c", cmd])
except:
pass
if arg == "-restore":
restore_windows()
Elif arg == "-get":
read_windows()
NodeJを好む場合:セッションの保存と復元を可能にする小さなライブラリ/コマンドラインツールを作成し、さまざまなモニターセットアップと仮想デスクトップをサポートしています。ウィンドウ関連機能の実装を確認することをお勧めします。 https://github.com/johannesjo/linux-window-session-manager/blob/master/lib/x11-wrapper.js
ここですべてを見つけることができます: https://github.com/johannesjo/linux-window-session-manager
Wmctrlをインストールする場合、「wmctrl -Gl」を使用して、現在の位置とサイズを含むすべてのウィンドウのリストを取得できます。その後、ステップ4でこの情報を使用して、-eオプションを指定してwmctrlを呼び出し、サイズと位置を復元できます。例えば:
wmctrl -ir <id> -e 0,<x>,<y>,<w>,<h>