Görünüşe göre tasarlanmış davranışın davranışını değiştirmek için "gizli" bir ayar bulamadım. Gerçekten sol ekranın "temel" ekran olduğu varsayılıyor.
Bununla birlikte, esasen aynı sonuç ile bir geçici çözüm oluşturmak çok mümkündür. İkinci bir ekran bağlandığında, tüm pencereleri listeleyen bir komut dosyası oluşturabilirsiniz. Daha sonra, başlangıçta sol ekrana taşınan tüm pencereler, bir veya iki saniye içinde sağdaki ekrana geri kaydırılır. Tüm pencerelerin boyutu korunacaktır.
Aşağıdaki senaryo bunu yapar.
İki versiyon
Düzenlenmiş pencerelerinizi iki şekilde geri yükleyebilirsiniz:
- Bazen, ikinci ekran bağlandıktan sonra çalıştırmak için bir kısayol tuşu ile.
- Otomatik olarak, komut dosyasını arka planda çalıştırmak, ekranınızın bağlanmasını beklemek.
Nasıl kullanılır
Hazırlıklar
Yüklemek wmctrl
sudo uygun-get install wmctrl
Yardımı ile iki ekranınızın isimlerine bakın xrandr
, ekranların isimleri "bağlı" kelimesinden hemen önce olacaktır.
Kopyala Aşağıdaki komut dosyalarından birini, baş bölümünde, bu iki satırda ekran adlarını doğru olanlarla değiştirin:
screen_1 = "LVDS1" # your main screen (laptop)
screen_2 = "VGA1" # secundary screen (on the left)
komut dosyasını farklı kaydet move_windows.py
Ekran ayarlarında ikincil ekranınızın solda olduğundan emin olun. İki ekranın üst satırları aynı hizada olmalıdır (sorunuzun ilk resminde olduğu gibi).
Komut dosyasını
çalıştırın - Ara sıra çalıştırmak için birini kullanın, ikinci ekran bağlandıktan sonra çalıştırın.
python3 /path/to/move_windows.py
Yapması gerekeni yaptığını düşünüyorsanız, klavye kısayoluna eklemek isteyebilirsiniz: Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
Arka planda çalıştırmak için birini kullanıyorsanız, komutla da çalıştırın:
python3 /path/to/move_windows.py
İstediğiniz gibi davranıyorsa, başlangıç uygulamalarınıza ekleyin: Çizgi> Başlangıç Uygulamaları> Ekle
Senaryoyu dizüstü bilgisayarım (sağda) ve iki farklı ekranla (solda) test ettim. Sonuç aynıydı.
dizüstü bilgisayar ekranı
komut dosyası olmadan bağlanma
çalışan komut dosyasına bağlanma
Senaryo işini yaptıktan sonra, pencereler "yalnız bırakılacaktır" (elbette) ve pencerelerinizi istediğiniz gibi düzenleyebilirsiniz.
Senaryo (lar)
1. "Manuel" sürüm, ekran bağlandıktan sonra çalıştırmak için
#!/usr/bin/env python3
import subprocess
import time
#--
screen_2 = "LVDS1" # replace with your internal screen (right)
screen_2 = "VGA1" # replace with your external screen (left)
#--
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shift(xr_output):
lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows(shift):
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
relevant = []
for w in w_data:
props = get("xprop -id "+w[0])
if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
shift_windows(get_shift(get("xrandr")))
2. Otomatik sürüm, arka planda çalıştırmak
#!/usr/bin/env python3
import subprocess
import time
#--
screen_2 = "LVDS1" # replace with your internal screen (right)
screen_2 = "VGA1" # replace with your external screen (left)
#--
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shift(xr_output):
lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows(shift):
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
relevant = []
for w in w_data:
props = get("xprop -id "+w[0])
if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
while True:
try:
screen_info1 = get("xrandr")
time.sleep(5)
screen_info2 = get("xrandr")
check = screen_2+" connected"
if (check in screen_info1, check in screen_info2) == (False, True):
time.sleep(5)
shift_windows(get_shift(screen_info2))
except:
pass