Mevcut masaüstü düzenini saklamanın bir yolu var mı?

24

Uygulamalarımın mevcut konumlarını kaydedebilmeyi istediğimden, aynı olanları açıp bir şeyleri çalıştırdığımda onlar oldukları gibi yeniden düzenleyecekler.

Mesela ben bir yüce ve üç tane terminal penceresini açacaksam, bunu bir şekilde kaydetmek istiyorum.

Uygulamalarımın konumlarını kolayca kaydedebildiğim sürece bir uygulama mı yoksa komut satırı aracı mı olduğu umrumda değil.

Moom 'un büyük bir hayranıyım, ancak maalesef yalnızca MacOS'ta çalışıyor ve Ubuntu'dayken bunu çok özlüyorum. Daha fazla özelliği destekliyor ve eğer benim de ana sorunumun üstüne yakın bir şey biliyorsanız, bu da iyi.

    
sordu Lipis 27.09.2012 12:02

4 cevap

23

Not

Komut dosyası, 16 Ocak 2017 tarihinde komutundan komutunun komutunu uygulamak için komutunun farklı olduğu birkaç uygulama için düzeltme yapılarak düzeltildi. Muhtemelen, bu bazen uygulamalarda ortaya çıkar. Birisi bir tane bulursa, lütfen yorum bırakın.

Pencere düzenlemesini ve karşılık gelen uygulamaları hatırlamak ve geri yüklemek için Komut Dosyası.

Aşağıdaki komut dosyası iki seçenekle çalıştırılabilir. Diyelim ki pencere düzenlemesi aşağıdaki gibidir:

Mevcut pencere düzenlemesini ve uygulamalarını okumak (hatırlayın) için, komut dosyasını şu seçenekle çalıştırın:

<script> -read

Ardından tüm pencereleri kapatın:

Sonra, son hatırlanan pencere düzenlemesini kurmak seçeneğine getirin:

<script> -run

ve son hatırlanan pencere düzenlemesi geri yüklenecek:

Bu, yeniden başlatmanın ardından da çalışır.

İki komutu iki farklı kısayol tuşu altında koymak, pencere düzeninizi "kaydedebilir", bilgisayarınızı kapatabilir ve aynı pencere düzenlemesini (örneğin, yeniden başlatma) sonra geri çağırabilirsiniz.

Komut dosyası nedir ve ne yapar? değil

-read

seçeneğiyle çalıştırın
  • Komut, tüm pencereleri, tüm çalışma alanlarını, konumlarını, boyutlarını ve sahip oldukları uygulamaları listelemek için wmctrl kullanır.
  • Komut, daha sonra, windows konumlarını göreceli olarak ( wmctrl çıktısında olduğu haliyle geçerli çalışma alanına), mutlak konumlarına, genişleme çalışma alanlarınıza "dönüştürür". Bu nedenle, hatırlamak istediğiniz pencerelerin sadece bir çalışma alanında mı yoksa farklı çalışma alanlarına yayılmış mı olduğu önemli değildir.
  • Komut, daha sonra mevcut pencere düzenini "hatırlar" ve onu ev dizininizdeki görünmez bir dosyaya yazar.

-run

seçeneğiyle çalıştırın
  • komut, son hatırlanan pencere düzenlemesini okur; ilgili uygulamaları başlatır, pencereleri hatırlanan konumlara taşır, ayrıca wmctrl yardımıyla

Komut dosyası, muhtemelen pencerelerde açılmış olabilecek dosyaları veya tarayıcı penceresinde açılan web sitelerini hatırlamamaktadır .

Sorunlar

wmctrl ve Unity kombinasyonunun bazı hataları vardır, birkaç örnek:

  • wmctrl tarafından okunan pencere koordinatları, href="https://askubuntu.com/questions/576604/what adresinden bahsedildiği gibi, konum pencerelerine komuttan biraz farklıdır. -causes-sapma-in-the-wmctrl-pencere-hareket-komuta burada ">. Bu nedenle, hatırlanan pencere konumları orijinal konumdan biraz farklı olabilir.
  • wmctrl komutları, pencerenin kenarı Unity Launcher veya panelin çok yakınındaysa, önceden kestirilemiyor.
  • "Hatırlanan" pencerelerin, wmctrl yerleştirme komutunun iyi çalışması için bir çalışma alanı sınırları içinde olması gerekir.

Bazı uygulamalar yeni pencereleri varsayılan olarak yeni bir sekmede aynı pencerede açar ( gedit gibi). % Co_de% için düzeltdim, ancak daha fazla istisna bulursanız lütfen bunu belirtin.

Komut dosyası

#!/usr/bin/env python3
import subprocess
import os
import sys
import time

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 get_res():
    # get resolution and the workspace correction (vector)
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    res = [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    return [res, curr_vpdata]

app = lambda pid: subprocess.check_output(["ps", "-p",  pid, "-o", "comm="]).decode("utf-8").strip()

def read_windows():
    res = get_res()
    w_list =  [l.split() for l in get("wmctrl -lpG").splitlines()]
    relevant = [[w[2],[int(n) for n in w[3:7]]] for w in w_list if check_window(w[0]) == True]
    for i, r in enumerate(relevant):      
        relevant[i] = app(r[0])+" "+str((" ").join([str(n) for n in r[1]]))
    with open(wfile, "wt") as out:
        for l in relevant:
            out.write(l+"\n")

def open_appwindow(app, x, y, w, h):
    ws1 = get("wmctrl -lp"); t = 0
    # fix command for certain apps that open in new tab by default
    if app == "gedit":
        option = " --new-window"
    else:
        option = ""
    # fix command if process name and command to run are different
    if "gnome-terminal" in app:
        app = "gnome-terminal"
    elif "chrome" in app:
        app = "/usr/bin/google-chrome-stable"


    subprocess.Popen(["/bin/bash", "-c", app+option])
    # fix exception for Chrome (command = google-chrome-stable, but processname = chrome)
    app = "chrome" if "chrome" in app else app
    while t < 30:      
        ws2 = [w.split()[0:3] for w in get("wmctrl -lp").splitlines() if not w in ws1]
        procs = [[(p, w[0]) for p in get("ps -e ww").splitlines() \
                  if app in p and w[2] in p] for w in ws2]
        if len(procs) > 0:
            time.sleep(0.5)
            w_id = procs[0][0][1]
            cmd1 = "wmctrl -ir "+w_id+" -b remove,maximized_horz"
            cmd2 = "wmctrl -ir "+w_id+" -b remove,maximized_vert"
            cmd3 = "wmctrl -ir "+procs[0][0][1]+" -e 0,"+x+","+y+","+w+","+h
            for cmd in [cmd1, cmd2, cmd3]:   
                subprocess.call(["/bin/bash", "-c", cmd])
            break
        time.sleep(0.5)
        t = t+1

def run_remembered():
    res = get_res()[1]
    try:
        lines = [l.split() for l in open(wfile).read().splitlines()]
        for l in lines:          
            l[1] = str(int(l[1]) - res[0]); l[2] = str(int(l[2]) - res[1] - 24)
            open_appwindow(l[0], l[1], l[2], l[3], l[4])   
    except FileNotFoundError:
        pass

if arg == "-run":
    run_remembered()
elif arg == "-read":
    read_windows()

Nasıl ayarlanır?

Başlamadan önce, gedit öğesinin yüklendiğinden emin olun:

sudo apt-get install wmctrl

Ardından:

  1. Komut dosyasını boş bir dosyaya kopyalayın, wmctrl olarak recall_windows olarak kaydedin. Gerekirse dizini oluşturun. Dizin henüz mevcut değilse, dizini oluşturduktan sonra ~/bin çalıştırın veya çıkın. Şimdi source ~/.profile olacak
  2. Komut dosyasını yürütülebilir hale getirin (!).
  3. Şimdi birkaç pencere açın, $PATH , gedit ya da her neyse ve komutu çalıştırarak bir uçbirimde komut dosyasını sınayın (yol öneki gerekmez):

    recall_windows -read
    
  4. pencereleri kapatın. Şimdi bir terminalde çalıştırın:

    recall_windows -run
    

Pencere kurulumunuz şimdi geri yüklenmelidir

Her şey yolunda giderse, kısayol tuşlarına iki komut ekleyin: Sistem Ayarları & gt; "Klavye" & gt; "Kısayollar" & gt; "Özel Kısayollar". "+" İşaretini tıklayın ve komutları ekleyin:

recall_windows -read

ve

recall_windows -run

iki farklı kısayol tuşuna

    
verilen cevap Jacob Vlijm 07.07.2015 19:25
2

böyle bir program yok. Compiz yavrusu kurabilirsiniz:

sudo apt-get install compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins

ve bu nasıl yapılır?

compiz, birlik / gnome için en gelişmiş masaüstü aracıdır

    
verilen cevap user91632 27.09.2012 12:52
1

Bunu gerçekleştirmenin basit bir yolunu bilmiyorum.

Ancak, çok basit bir nedenden dolayı nadiren buna ihtiyacım var: askıya al. Askıya al ve hazırda bekletme arkadaşlarınız. Sadece pencere konumlarını değil, aynı zamanda sisteminizin tüm durumunu da kaydedersiniz. Yeni bir çekirdek sürümünü yeniden yüklemek haricinde, bilgisayarı tamamen kapatıyorum.

    
verilen cevap January 27.09.2012 12:23
0

Oturumları kaydetmeye ve geri yüklemeye izin veren ve farklı monitör kurulumları ile sanal masaüstleri için destek sağlayan küçük bir kütüphane / komut satırı aracı yazdım.

Kurulum

npm install -g linux-window-session-manager

Kullanım

Geçerli oturumu ~ / .lwsm / sessionData / DEFAULT.json dosyasına kaydedin

lwsm save

Geçerli oturumu ~ / .lwsm / sessionData / my-session.json dosyasına kaydedin

lwsm save my-session   

Oturumu ~ / .lwsm / sessionData / DEFAULT.json'dan geri yükleyin

lwsm restore

Oturumu ~ / .lwsm / sessionData / my-session.json'dan geri yükleyin

lwsm restore my-session   

Oturum başlamadan önce tüm çalışan uygulamaları zarif bir şekilde kapatın

lwsm restore --closeAllOpenWindows

Şuna bakın: İşte

    
verilen cevap hugo der hungrige 25.04.2017 17:34

Etiketlerdeki diğer soruları oku