Ustawianie innego programu uruchamiającego Unity dla obszaru roboczego:
1. 2. 3. 4.
Poniższe rozwiązanie umożliwia łatwe ustawienie innego zestawu ikon programu uruchamiającego dla każdego obszaru roboczego, bez względu na to, ile masz obszarów roboczych.
Konfiguracja składa się z dwóch części:
(Jedna) kombinacja klawiszy skrótu do „zapamiętania” zestawu ikon programu uruchamiającego dla bieżącego obszaru roboczego.
Skrypt do uruchomienia w tle, śledzący bieżący obszar roboczy i ustawiający odpowiedni Unity Launcher. Działa, gdy użytkownik zmienia przestrzeń roboczą.
Jak to działa
W grę wchodzą dwa małe skrypty:
Pierwszy skrypt robi jedną prostą rzecz: to zapisuje zawartość bieżącego wyrzutni do pliku (ukryty) w swoim katalogu domowym, o nazwie (numerowane) po bieżącym obszarze roboczym.
Drugi scenariusz pilnuje co jest obecny obszar roboczy. Jeśli nastąpi zmiana obszaru roboczego , skrypt sprawdza, czy istnieje odpowiedni plik danych (uruchamiający) (utworzony przez pierwszy skrypt). Jeśli tak, to czyta plik i zmienia Unity Launcher, jak zapamiętano w pliku.
Otóż to.
Jak skonfigurować
Skrypt musi wmctrl
zostać zainstalowany:
sudo apt-get install wmctrl
Utwórz katalog, w którym będą przechowywane oba skrypty . Ważne jest, aby oba skrypty były przechowywane razem w jednym katalogu, ponieważ mają wspólną funkcjonalność, a jeden importuje z drugiego. Z tego samego powodu ważne jest, aby nazwać je dokładnie tak, jak wskazano poniżej.
Skopiuj każdy z poniższych skryptów do (innego) pustego pliku, zapisz je w katalogu (utworzonym w 2.
) o nazwie dokładnie :
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
Dodaj pierwszy skrypt ( set_workspace.py
) do wybranej kombinacji klawiszy skrótu: Ustawienia systemowe> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:
python3 /path/to/set_workspace.py
Uruchom kombinację klawiszy i sprawdź, czy plik taki jak: .launcher_data_3
jest tworzony w twoim katalogu domowym. Prawdopodobnie będziesz musiał nacisnąć Ctrl+, Haby plik był widoczny (pliki zaczynające się od a .
są domyślnie niewidoczne).
Poruszaj się po obszarach roboczych i powtórz procedurę: ustaw kombinację ikon programu uruchamiającego i naciśnij kombinację klawiszy, aby „zapamiętać” zestaw dla tego konkretnego obszaru roboczego.
Już praktycznie skończyłeś. Uruchom skrypt w tle za pomocą polecenia (z poziomu okna terminala, uruchom go):
python3 /path/to/launcher_perworkspace.py
Jeśli wszystko działa poprawnie, a program uruchamiający przełącza się na obszar roboczy, dodaj następujące polecenie do aplikacji Autostart: Dash> Aplikacje Autostart> Dodaj:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Uwagi
- Jeśli chcesz zmienić zestaw ikon programu uruchamiającego dla określonego obszaru roboczego, po prostu przejdź do tego obszaru roboczego, dodaj / usuń ikony według własnego uznania i naciśnij kombinację klawiszy (nie trzeba ponownie uruchamiać skryptu w tle).
- Na podstawie komentarzy mam wrażenie, że skrót nie pamięta o bieżącym programie uruchamiającym dla bieżącego obszaru roboczego. Potrzebujesz tylko jednego skrótu klawiaturowego, aby „zapisać” bieżący program uruchamiający dla bieżącego obszaru roboczego. Będzie działać dokładnie tak samo, bez względu na to, na jakim obszarze roboczym się znajdujesz. Skrypt sam ustalić, co jest prąd roboczy.
Edytować
Z twojego komentarza rozumiem, że nie jesteś pewien, aby uruchomić skrypt (y) i boisz się, że zepsujesz swój obecny program uruchamiający.
Jestem pewien, że to za dużo (lub za mało :) szacunku dla tego, co robi skrypt. Możesz jednak po prostu wykonać kopię zapasową bieżącego Unity Launcher za pomocą polecenia:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Spowoduje to utworzenie pliku ~/launcher_output
zawierającego pełne polecenie, aby przywrócić Unity Launcher do początkowej sytuacji. W nagłych wypadkach wystarczy skopiować zawartość pliku i wkleić go w terminalu.
Ale znowu jest bardzo mało prawdopodobne, że zepsujesz program uruchamiający, chyba że ręcznie zmienisz skrypt.
WAŻNA EDYCJA (2)
Zgodnie z wnioskiem w komentarzu, niniejszym wersji, która działa bez konieczności korzystania z jakichkolwiek kombinacji skrótów; po prostu uruchom skrypt i zacznij konfigurować programy uruchamiające w określonych obszarach roboczych. Skrypt utworzy (niewidoczne) pliki w katalogu domowym, aby zapamiętać zestaw programów uruchamiających (Unity-) w różnych obszarach roboczych.
Próbowałem tego w „wersji 1” skryptu, ale zawsze „osadzanie” dwóch kontroli uruchamiania między dwiema kontrolami przestrzeni roboczej okazało się sztuczką, aby zapobiec niepożądanemu zachowaniu (zapisywaniu niepoprawnych danych) podczas szybkiego przemieszczania się po obszarach roboczych.
Jak używać
Podobnie jak pierwsza wersja, ten skrypt używa wmctrl
:
sudo apt-get install wmctrl
Skopiuj skrypt do pustego pliku i zapisz go jako launcher_toworkspace.py
Uruchom go za pomocą polecenia:
python3 /path/to/launcher_toworkspace.py
Jeśli działa zgodnie z oczekiwaniami, dodaj następujące polecenie do aplikacji startowych:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
Scenariusz
#!/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()
Uwaga
Jeśli skonfigurujesz obszary robocze z poprzednią wersją skryptu, powinny one również działać dla tej wersji.
PPA
Zgodnie z 23.04.2015 ładne pytanie Dennisa J i zachęty ze strony Parto doprowadziły do stworzenia ppa
skryptu przeznaczonego dla skryptu, opisanego na webupd8 , zawierającego GUI do zarządzania nim.
ppa:vlijm/lswitcher
Aby go zainstalować, uruchom:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Odtąd jest on pakowany do wersji Trusty & Utopic. Dodam innych po testach. Dodam również .deb
instalator, ale sugeruję użycie ppa
, ponieważ zwykle tego rodzaju rzeczy są aktualizowane co jakiś czas.
Ponieważ lokalizacja danych rzutni zmieniła się z ~/
na ~/.config/lswitcher
, będziesz musiał ponownie skonfigurować Unity Launcher, jeśli używałeś poprzedniego skryptu.