Çalışma alanı başına farklı bir Birlik Başlatıcı ayarlama:
1. 2. 3. 4.
Aşağıdaki çözüm, çalışma alanınız kaç olursa olsun, çalışma alanı başına farklı bir başlatıcı simgesinin olmasını kolayca mümkün kılar.
Kurulum iki bölümden oluşmaktadır:
Geçerli çalışma alanı için başlatıcı simgeler kümesini "hatırlamak" için bir (bir) kısayol tuşu birleşimi.
Arka planda çalışan bir komut dosyası, geçerli çalışma alanının ne olduğunu ve ilgili Birlik Başlatıcı'nın ayarını takip eder. Kullanıcı çalışma alanını değiştirdiğinde hareket eder.
Nasıl çalışır
İki küçük komut dosyası dahil edilir:
İlk komut basit bir şey yapar: adlandırılmış ev dizininde bir (gizli) dosyasına akım başlatıcı içeriğini yazar mevcut çalışma sonrasında (numaralı).
İkinci senaryo geçerli çalışma alanıdır şeylere dikkat tutar. Bir çalışma alanı değişikliği varsa, komut dosyası karşılık gelen (başlatıcı-) veri dosyası olup olmadığını görür (ilk komut dosyası tarafından oluşturulur). Eğer öyleyse, dosyayı okur ve Unity Launcher'ı, dosyada hatırlandığı şekilde değiştirir.
Bu kadar.
Nasıl kurulur
Komut dosyasının wmctrl
yüklenmesi gerekiyor :
sudo apt-get install wmctrl
Her iki komut dosyasının da depolanacağı bir dizin oluşturun . Her iki komut dosyasının da bir dizinde bir arada tutulması önemlidir, çünkü işlevleri paylaşırlar ve biri diğerinden içe aktarılır. Aynı sebepten dolayı, aşağıda belirtildiği şekilde isimlendirmeniz önemlidir.
Aşağıdaki komut dosyalarının her birini (farklı) boş bir dosyaya kopyalayın, onları tam olarak adlandırılmış dizine (oluşturulan 2.
) kaydedin :
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
İlk komut dosyasını ( set_workspace.py
) seçtiğiniz bir kısayol tuşu kombinasyonuna ekleyin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
python3 /path/to/set_workspace.py
Tuş birleşimini çalıştırın ve .launcher_data_3
ana dizininizde gibi bir dosyanın oluşturulduğunu görün. Dosyayı görünür yapmak için Ctrl+ tuşuna basmanız gerekebilir H(dosyalar, .
varsayılan olarak görünmez olan).
Çalışma alanlarınız arasında gezinin ve prosedürü tekrarlayın: başlatıcı simgelerinin bir kombinasyonunu ayarlayın ve o belirli çalışma alanı için takımı "hatırlamak" için tuş kombinasyonunuza basın.
Şimdi pratikte bitti. Background script'i komut ile test et (terminal penceresinden çalışmaya devam et):
python3 /path/to/launcher_perworkspace.py
Her şey yolunda giderse ve başlatıcınız çalışma alanı başına geçerse, Başlangıç uygulamalarınıza aşağıdaki komutu ekleyin: Dash> Başlangıç Uygulamaları> Ekle:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
notlar
- Belirli bir çalışma alanı için başlatıcı simge kümesini değiştirmek istiyorsanız, çalışma alanına gidin, istediğiniz gibi simgeler ekleyin / çıkarın ve tuş kombinasyonunuza basın (arka plan komut dosyasını yeniden başlatmanız gerekmez).
- Yorumlardan, mevcut çalışma alanı için mevcut Başlatıcı'yı hatırlamak için kısayolda bazı yanlış anlamaların olduğu hissine kapılıyorum. Geçerli çalışma alanı için geçerli başlatıcıyı "kaydetmek" için yalnızca bir klavye kısayoluna ihtiyacınız vardır . Hangi çalışma alanında olursanız olun aynı şekilde çalışacaktır. Komut dosyasının kendisi , geçerli çalışma alanının ne olduğunu belirler .
Düzenle
Yorumunuzdan, komut (lar) ı çalıştırmaktan emin olmadığınızı ve şu anki başlatıcınızı mahvedeceğinizden korktuğunuzu anlıyorum.
Senaryonun ne yaptığına çok fazla (veya çok az :)) saygı duyduğuma eminim. Ancak şu anki Unity Launcher'ı şu 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, ~/launcher_output
Unity Launcher'ınızı başlangıç durumuna geri yüklemek için complete komutunu içeren bir dosya oluşturur . Acil durumlarda, sadece dosyanın içeriğini kopyalayın ve terminale yapıştırın.
Fakat yine de, senaryoyu elle değiştirmediğiniz sürece, başlatıcınızı karıştırmanız pek mümkün değildir.
ÖNEMLİ EDIT (2)
Bir yorumda istendiği gibi, burada herhangi bir kısayol kombinasyonu kullanmak zorunda kalmadan çalışan bir versiyonu ; sadece betiği çalıştırın ve başlatıcılarınızı belirli çalışma alanlarına kurmaya başlayın. Komut dosyası, farklı çalışma alanlarındaki (Unity-) başlatıcı kümenizi hatırlamak için ana dizininizde (görünmez) dosyalar oluşturur.
Bunu betiğin "sürüm 1" ini denedim, ancak her zaman iki başlatıcı denetimini iki çalışma alanı denetimi arasına "gömmek", çalışma alanlarından hızla geçerken istenmeyen davranışları (hatalı verileri kaydetmeyi) önlemek için hile olduğu ortaya çıktı.
Nasıl kullanılır
İlk versiyonda olduğu gibi, bu komut dosyası wmctrl
şunları kullanır :
sudo apt-get install wmctrl
Komut dosyasını boş bir dosyaya kopyalayın, olarak kaydedin. launcher_toworkspace.py
Komutu ile çalıştırın:
python3 /path/to/launcher_toworkspace.py
Beklendiği gibi çalışıyorsa, Başlangıç Uygulamalarınıza aşağıdaki komutu ekleyin:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
Senaryo
#!/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ı betiğin önceki sürümüyle ayarladıysanız, bu sürüm için de çalışması gerekir.
PPA
2015-04-23 uyarınca, Dennis J'nin ve Parto'nun cesaretlendirmesinin güzel sorusu, onu yönetmek için bir GUI dahil olmak üzere webupd8'de eleppa
alınan bir betiğin oluşturulmasına yol açmıştır .
ppa:vlijm/lswitcher
Yüklemek için çalıştırın:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Şimdiden beri, Güvenilir ve Ütopik için paketlenmiştir. Testten sonra başkalarını ekleyeceğim. Ayrıca bir .deb
yükleyici daha ekleyeceğim , ancak kullanmanızı öneririm ppa
, çünkü genellikle bu tür şeyler her zaman ve her gün güncellenir.
Viewport verilerinin yer değiştiğini yana ~/
etmek ~/.config/lswitcher
, size önceki senaryoyu kullanılırsa tekrar Unity Launcher kurmak gerekecek.