Saya menggunakan Ubuntu 14.04 di laptop saya di meja saya dengan monitor kedua. Saat saya memutuskan sambungan dari monitor kedua—tanpa gagal—jendela saya untuk Emacs berpindah dari layar.
Saya dapat Alt-TAB untuk menjadikan Emacs jendela aktif, dan, bekerja membabi buta, menghentikan Emacs sehingga saya dapat memulai kembali, yang menyebabkannya muncul kembali di layar. Tapi, menurut saya harus ada cara di Ubuntu untuk mengembalikan jendela di luar layar ke layar. Apakah ada?
Tentu saja, solusi yang lebih baik adalah mencegah jendela keluar dari layar sebagai respons terhadap pemutusan monitor, dan saya akan menerima solusi untuk itu masalah.
PERBARUI:
Keluaran dari xrandr
saat terhubung ke monitor kedua:
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)
Keluaran dari xrandr
setelah memutuskan sambungan dari monitor kedua:
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)
Juga, saya mencoba menukar posisi kiri-kanan jendela Terminal saya dan jendela Emacs saya dan kemudian memutuskan sambungan. Ini memungkinkan jendela Emacs untuk tetap berada di layar setelah memutuskan sambungan dari monitor kedua. Dan jendela Terminal bertahan di posisi yang menghilangkan Emacs. Jadi, sepertinya aplikasi itu ada hubungannya dengan ini.
Jawaban yang Diterima:
Pindahkan semua jendela ke area yang terlihat
Seperti yang diusulkan/diminta dalam komentar, skrip di bawah ini akan memindahkan semua jendela "normal" ke area yang terlihat di ruang kerja saat ini.
Solusinya adalah solusi; info layar diperbarui dengan benar, mengingat perbedaan dalam output xrandr
, sebelum dan dan sesudah memutuskan sambungan. Alasan mengapa jendela tidak bergerak sendiri (saat ini) tidak diketahui, kecuali jawaban lain memecahkan masalah.
Skrip
#!/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]])])
Cara menggunakan
-
Script membutuhkan
wmctrl
:sudo apt-get install wmctrl
-
Salin skrip ke file kosong, simpan sebagai
move_windows.py
-
Uji-jalankan:buka sejumlah jendela, letakkan di ruang kerja yang berbeda, dll., atau coba putuskan sambungan monitor kedua. Kemudian jalankan perintah:
python3 /path/to/move_windows.py
Semua jendela "normal" harus dipindahkan ke area yang terlihat dari ruang kerja saat ini.
-
Jika semuanya berfungsi dengan baik, tambahkan ke tombol pintasan:pilih:Pengaturan Sistem> “Keyboard”> “Pintasan”> “Pintasan Khusus”. Klik “+” dan tambahkan perintah:
python3 /path/to/move_windows.py
Sekarang Anda seharusnya dapat memindahkan semua jendela ke area yang terlihat di ruang kerja saat ini, dengan tombol pintas Anda.
Terkait:Kvm Network Bridge untuk Menetapkan Ip Statis di Ubuntu?