Používám Ubuntu 14.04 na svém notebooku u svého stolu s druhým monitorem. Když se bez problémů odpojím od druhého monitoru, moje okno pro Emacs se přesune mimo obrazovku.
Mohu Alt-TAB udělat z Emacsu aktivní okno, a když pracuji naslepo, zastavit Emacs, abych ho mohl restartovat, což způsobí, že se znovu objeví na obrazovce. Ale zdá se mi, že by v Ubuntu měl existovat způsob, jak vrátit okno mimo obrazovku zpět na obrazovku. Existuje?
Samozřejmě lepším řešením by bylo zabránit tomu, aby okna scházela z obrazovky v reakci na odpojení monitoru, a přijal bych řešení to problém.
AKTUALIZACE:
Výstup xrandr
při připojení k druhému monitoru:
Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1280+0 (normal left inverted right x axis y axis) 382mm x 215mm
1920x1080 60.0*+ 59.9
1680x1050 60.0 59.9
1600x1024 60.2
1400x1050 60.0
1280x1024 60.0
1440x900 59.9
1280x960 60.0
1360x768 59.8 60.0
1152x864 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
1280x1024 60.0*+ 75.0
1280x960 60.0
1152x864 75.0
1024x768 75.1 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3 56.2
640x480 75.0 72.8 66.7 60.0
720x400 70.1
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Výstup xrandr
po odpojení od druhého monitoru:
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
1920x1080 60.0*+ 59.9
1680x1050 60.0 59.9
1600x1024 60.2
1400x1050 60.0
1280x1024 60.0
1440x900 59.9
1280x960 60.0
1360x768 59.8 60.0
1152x864 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Také jsem se pokusil prohodit levou a pravou pozici okna terminálu a okna Emacs a poté se odpojit. To umožňuje, aby okno Emacs zůstalo na obrazovce po odpojení od druhého monitoru. A okno Terminálu přežije v pozici, která eliminovala Emacs. Zdá se tedy, že aplikace s tím má něco společného.
Přijatá odpověď:
Přesuňte všechna okna do viditelné oblasti
Jak je navrženo/požadováno v komentáři, níže uvedený skript přesune všechna „normální“ okna do viditelné oblasti na aktuálním pracovním prostoru.
Řešením je řešení; informace na obrazovce se aktualizují správně, vzhledem k rozdílu ve výstupu xrandr
, před a a po odpojení. Důvod, proč se okna sama nepohybují, je (momentálně) neznámý, pokud problém nevyřeší jiná odpověď.
Skript
#!/usr/bin/env python3
import subprocess
# get the resolution of the screen (+0+0)
res = [
int(n) for n in [
s.split("+")[0].split("x")\
for s in subprocess.check_output(["xrandr"]).decode("utf-8").split()\
if "+0+0" in s][0]
]
# create list of windows
w_list = [w.split() for w in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
# filter only "normal" ones
valid = [
w for w in w_list if "_NET_WM_WINDOW_TYPE_NORMAL" in\
subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8")
]
# get the number of valid windows and calculate a targeted position
# the targeted position is a hunch, it will be exact if the window fits completely inside the resolution
# it will work anyway
parts = len(valid)+2
positions = [(int(n*res[0]/parts), int(n*res[1]/parts)) for n in list(range(parts))[1:-1]]
# unmaximaize, move the windows to the visible area (current workspace)
for i, w in enumerate(valid):
subprocess.Popen(["wmctrl", "-ir", w[0], "-b", "remove,maximized_vert,remove,maximized_horz"])
# weird, but sometimes wmctrl refuses to move a window if it is not resized first (?)
subprocess.Popen(["wmctrl", "-ir", w[0], "-e", "0,200,200,200,200"])
subprocess.Popen(["wmctrl", "-ir", w[0], "-e", (",").join(["0", str(positions[i][0]), str(positions[i][1]),w[4],w[5]])])
Jak používat
-
Skript potřebuje
wmctrl
:sudo apt-get install wmctrl
-
Zkopírujte skript do prázdného souboru a uložte jej jako
move_windows.py
-
Vyzkoušejte to:otevřete několik oken, umístěte je na různé pracovní plochy atd. nebo zkuste odpojit druhý monitor. Poté spusťte příkaz:
python3 /path/to/move_windows.py
Všechna „normální“ okna by se měla přesunout do viditelné oblasti aktuálního pracovního prostoru.
-
Pokud vše funguje dobře, přidejte ji ke klávesové zkratce:zvolte:Nastavení systému> „Klávesnice“> „Zkratky“> „Vlastní zkratky“. Klikněte na „+“ a přidejte příkaz:
python3 /path/to/move_windows.py
Nyní byste měli být schopni přesunout všechna okna do viditelné oblasti na aktuální pracovní ploše pomocí vaší klávesové zkratky.
Související:Kvm Network Bridge k přiřazení statické IP adresy v Ubuntu?