Her çalışma alanında farklı simgelerle farklı bir Unity Launcher nasıl edinilir?

20

Her Çalışma Alanında Screenlets, devilspie veya CCSM kullanarak ayrı bir masaüstü klasörüne sahip olmanın çeşitli yanıtlarını okudum ... ama bu benim soruma cevap değil. Birkaç gün önce 14.04 LTS yükledim ve uygulamaların çoğunu ve bazı yeni sürümleri çalıştırmayı başardım. İstediğim, çalıştığım ortamlar için her biri farklı simgeleri olan 4 ayrı çalışma alanına sahip olmak. Örneğin,

  • Çalışma Alanı 1 - bilim ve matematik uygulamalarına adanmış
  • Çalışma Alanı 2 - müzik araçlarına adanmış
  • Çalışma Alanı 3 - elektronik devreler ve simülasyonlar için
  • Çalışma Alanı 4 - web'de gezinme ve genel bilgi işlem için

Her ekranın ayrı simgeler içerebileceği bir Android tablet düşünün.

Bunun nasıl yapılacağı açık olmalı, ancak bir cevap bulamıyorum. Ubuntu'da 4 günlük yaşıyorum, lütfen ne yaptığımı bildiğimi düşünmeyin!

    
sordu Dennis J 10.04.2015 16:18

1 cevap

24

Çalışma alanı başına farklı bir Unity Launcher ayarlama:


1. 2. 3. < em> 4.

Aşağıdaki çözüm, kaç çalışma alanı olursa olsun, çalışma alanı başına farklı bir başlatıcı ikon setine sahip olmanızı kolaylıkla mümkün kılar.

Kurulum iki bölümden oluşur:

  1. Geçerli çalışma alanı için başlatıcı simgeleri setini "hatırlamak" için bir (bir) kısayol tuşu kombinasyonu.

  2. Mevcut çalışma alanının ne olduğunu ve ilgili Birlik Başlatıcı'yı ayarlayarak, arka planda çalışacak bir komut dosyası. Kullanıcı çalışma alanını değiştirdiğinde davranır.

Nasıl çalışır?

İki küçük komut dosyası dahil:

ilk komut dosyası basit bir şey yapar: geçerli başlatıcının içeriğini, geçerli çalışma alanınızdan sonra (numaralandırılmış) olarak adlandırılan (gizli) bir dosyaya, ev dizininizde yazar.

ikinci komut dosyası, mevcut çalışma alanının ne olduğuna dikkat eder. Bir çalışma alanı varsa, komut dosyası karşılık gelen (başlatıcı) veri dosyasının var olduğunu görür (ilk komut dosyası tarafından oluşturulur). Eğer öyleyse, dosyayı okur ve dosyada hatırlandığı gibi Unity Launcher'ı değiştirir.

İşte bu.

Nasıl ayarlanır?

  1. Komut dosyasının yüklenecek wmctrl 'si gerekiyor:

    sudo apt-get install wmctrl
    
  2. Her iki komut dosyasının kaydedileceği bir dizin oluşturun. Her iki betiğin bir dizinde bir arada tutulması önemlidir, zira bunlar işlevsellik ve bir diğerinden bir ithalatı paylaşırlar. Aynı sebepten dolayı, bunları tam olarak aşağıda belirtildiği gibi adlandırmanız önemlidir.

  3. Aşağıdaki komut dosyalarının her birini (farklı) boş bir dosyaya kopyalayın, dizine kaydedin ( 2. dizininde oluşturulur), tam olarak olarak adlandırın:

    set_workspace.py

    #!/usr/bin/env python3
    import subprocess    
    import os
    
    workspace_data = os.environ["HOME"]+"/.launcher_data_"
    key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
    
    def get_res():
        # get resolution
        xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
        pos = xr.index("current")
        return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
    
    def current():
        # get the current viewport
        res = get_res()
        vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
        dt = [int(n) for n in vp_data[3].split("x")]
        cols = int(dt[0]/res[0])
        curr_vpdata = [int(n) for n in vp_data[5].split(",")]
        curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
        return str(curr_col+curr_row*cols)
    
    def remember_current():  
        currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
        f = workspace_data+current()
        open(f, "w").write(currlauncher)
    
    if __name__ == "__main__":
        remember_current()
    

    launcher_perworkspace.py

    #!/usr/bin/env python3
    import subprocess
    import set_workspace
    import time
    
    workspace_data = set_workspace.workspace_data
    key = set_workspace.key
    
    def check_datafile(desktop):
        f = workspace_data+str(desktop)
        try:
            new_launcher = open(f).read()
            command = key[1]+key[2]+' "'+str(new_launcher)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
        except FileNotFoundError:
            pass
    
    curr_dt1 = set_workspace.current()
    check_datafile(curr_dt1)
    
    while True:
        time.sleep(1)
        curr_dt2 = set_workspace.current()
        if curr_dt2 != curr_dt1:
            check_datafile(curr_dt2)
        curr_dt1 = curr_dt2
    
  4. Seçtiğiniz bir kısayol tuş bileşimine ilk komut dosyasını ( set_workspace.py ) ekleyin: Sistem Ayarları & gt; "Klavye" & gt; "Kısayollar" & gt; "Özel Kısayollar". "+" İşaretini tıklayın ve komutu ekleyin:

    python3 /path/to/set_workspace.py
    
  5. Tuş kombinasyonunu çalıştırın ve aşağıdaki gibi bir dosya olup olmadığını görün: .launcher_data_3 , ev dizininizde oluşturulur. Dosyayı görünür kılmak için muhtemelen Ctrl + H tuşlarına basmanız gerekecektir (dosyalar . ile başlayarak varsayılan olarak görünmez).

    Çalışma alanlarınızda gezinin ve işlemi tekrarlayın: başlatıcı simgelerinin bir kombinasyonunu ayarlayın ve ilgili çalışma alanının kümesini "hatırlamak için" tuş kombinasyonuna basın.

  6. Artık pratikte bitti. Arka plan komut dosyasını komutla sınayın (bir terminal penceresinden, çalışmaya devam edin):

    python3 /path/to/launcher_perworkspace.py
    

    Her şey düzgün çalışıyorsa ve başlatıcınız çalışma alanı başına geçiyorsa, Başlangıç ​​komutlarınıza aşağıdaki komutu ekleyin: Dash & gt; Başlangıç ​​Uygulamaları & gt; Ekleyin:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
    

Notlar

  1. Belirli bir çalışma alanı için başlatıcı simgeleri setini değiştirmek isterseniz, çalışma alanına gidin, simgeleri istediğiniz şekilde ekleyin / kaldırın ve tuş kombinasyonunuza basın (arka plan komut dosyasını yeniden başlatmaya gerek yoktur).
  2. Yorum (lar) dan mevcut çalışma alanı için mevcut Launcher'ı hatırlamak için kısayol üzerinde bazı yanlış anlaşılmaların olduğunu hissediyorum. Mevcut çalışma alanı için geçerli başlatıcıyı "kaydetmek" için sadece bir klavye kısayoluna ihtiyacınız var. Hangi çalışma alanında olursanız olun, tam olarak aynı şekilde çalışacaktır. Komut dosyası, şu anki çalışma alanını olarak belirleyecektir.

Düzenle

Yorumunuzdan, senaryoyu / senaryoları çalıştırdığınızdan emin olmadığınızı ve mevcut başlatıcınız bozulacağından korktuğunu anlıyorum.

Komut dosyasının ne yaptığına çok fazla (ya da çok az :)) saygı olduğundan eminim. Bununla birlikte, şu andaki Unity Launcher'ı komutla yedekleyebilirsiniz:

printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output

Bu, Unity Launcher'ınızı ilk durumuna geri yüklemek için tam komutu içeren bir ~/launcher_output dosyası oluşturur. Acil durumlarda, dosyanın içeriğini kopyalayın ve terminale yapıştırın.

Yine de, komut dosyasını el ile değiştirmedikçe, başlatıcınızı dağıtmanız gerçekten olası değildir.

ÖNEMLİ DÜZENLEME (2)

Bir yorumda talep edildiği gibi, herhangi kısayol kombinasyonunu kullanmak zorunda kalmadan çalışan bir sürüm; Sadece komut dosyasını çalıştırın ve başlatıcılarınızı belirli çalışma alanlarına kurmaya başlayın. Komut, farklı çalışma alanlarındaki (Unity-) rampaları setini hatırlamak için giriş dizininizde (görünmez) dosyalar oluşturacaktır.

Bunu betiğin "sürüm 1" inde denedim, ancak her zaman iki çalışma alanı kontrolleri arasında iki başlatıcı kontrolünü "gömmek", hızlı bir şekilde hareket ederken istenmeyen davranışları (yanlış verileri kaydetme) önlemek için bir numara olarak ortaya çıktı. çalışma alanları.

Nasıl kullanılır?

  1. İlk sürüm gibi, bu komut wmctrl :

    kullanıyor

    sudo apt-get install wmctrl

  2. Komut dosyasını boş bir dosyaya kopyalayın, launcher_toworkspace.py olarak kaydedin

  3. Komutu kullanarak çalıştırın:

    python3 /path/to/launcher_toworkspace.py
    
  4. Beklendiği gibi çalışırsa, Başlangıç ​​Uygulamalarınıza aşağıdaki komutu ekleyin:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
    

Komut dosyası

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

datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"

key = [
    "gsettings get ",
    "gsettings set ",
    "com.canonical.Unity.Launcher favorites",
    ]

def get_launcher():
    return subprocess.check_output(
        ["/bin/bash", "-c", key[0]+key[2]]
        ).decode("utf-8").strip()

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

curr_ws1 = current()
currlauncher1 = get_launcher()

while True:
    time.sleep(1)
    currlauncher2 = get_launcher()
    curr_ws2 = current()
    datafile = workspace_data+curr_ws2
    if curr_ws2 == curr_ws1:
        if currlauncher2 != currlauncher1:
            open(datafile, "wt").write(currlauncher2)
    else:
        if not os.path.exists(datafile):
            open(datafile, "wt").write(currlauncher2)
        else:
            curr_set = open(datafile).read()
            command = key[1]+key[2]+' "'+str(curr_set)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
    curr_ws1 = curr_ws2
    currlauncher1 = get_launcher()

Not

Çalışma alanlarınızı komut dosyasının önceki sürümüyle kuruyorsanız, bu sürüm için de çalışmalıdır.

PPA

2015-04-23'e göre, Dennis J'nin güzel sorusu ve Parto'nun teşvik edilmesi, komut dosyası için ppa oluşturulmasına yol açmıştır, webupd8'ye kaydedildi .

ppa:vlijm/lswitcher

Yüklemek için şunu çalıştırın:

sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher

Şu andan beri, Trusty & amp; Ütopik. Test ettikten sonra başkalarını ekleyeceğim. Ayrıca, .deb yükleyicisini de ekleyeceğim, ancak ppa değerini kullanmanızı öneririm çünkü genellikle bu tür şeyler her zaman güncellenir.

Vitrin verilerinin yeri ~/ ile ~/.config/lswitcher arasında değiştiğinden, önceki betiği kullandıysanız Unity Launcher'ınızı tekrar ayarlamanız gerekir.

    
verilen cevap Jacob Vlijm 12.04.2015 09:15

Etiketlerdeki diğer soruları oku