Festlegen eines anderen Unity Launcher pro Arbeitsbereich:
1. 2. 3. 4.
Mit der folgenden Lösung können Sie problemlos verschiedene Launcher-Symbole pro Arbeitsbereich festlegen, unabhängig davon, wie viele Arbeitsbereiche Sie haben.
Das Setup besteht aus zwei Teilen:
Eine (eine) Tastenkombination, um sich die Startersymbole für den aktuellen Arbeitsbereich zu merken.
Ein Skript, das im Hintergrund ausgeführt wird, den aktuellen Arbeitsbereich verfolgt und den entsprechenden Unity Launcher festlegt. Es handelt sich immer dann, wenn der Benutzer den Arbeitsbereich wechselt.
Wie es funktioniert
Zwei kleine Skripte sind beteiligt:
Das erste Skript macht eine einfache Sache: Es schreibt den Inhalt des aktuellen Launchers in eine (versteckte) Datei in Ihrem Home-Verzeichnis, die nach Ihrem aktuellen Arbeitsbereich benannt (nummeriert) ist.
Das zweite Skript überwacht den aktuellen Arbeitsbereich. Wenn sich der Arbeitsbereich ändert , erkennt das Skript, ob eine entsprechende (Launcher-) Datendatei vorhanden ist (die vom ersten Skript erstellt wurde). In diesem Fall wird die Datei gelesen und der in der Datei gespeicherte Unity Launcher geändert.
Das ist es.
Wie stellt man das ein
Das Skript muss wmctrl
installiert sein:
sudo apt-get install wmctrl
Erstellen Sie ein Verzeichnis, in dem beide Skripte gespeichert werden. Es ist wichtig, dass beide Skripte in einem Verzeichnis zusammengehalten werden, da sie Funktionen gemeinsam nutzen und eines vom anderen importiert. Aus dem gleichen Grund ist es wichtig, dass Sie sie genau wie unten angegeben benennen.
Kopieren Sie jedes der folgenden Skripte in eine (andere) leere Datei und speichern Sie sie in dem Verzeichnis (erstellt in 2.
), das genau wie folgt benannt ist:
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
Fügen Sie das erste Skript ( set_workspace.py
) zu einer Tastenkombination Ihrer Wahl hinzu: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
python3 /path/to/set_workspace.py
Führen Sie die Tastenkombination aus und prüfen Sie, ob eine Datei wie: .launcher_data_3
in Ihrem Ausgangsverzeichnis erstellt wurde. Sie müssen wahrscheinlich Ctrl+ drücken H, um die Datei sichtbar zu machen (Dateien, die mit einem beginnen, .
sind standardmäßig unsichtbar).
Navigieren Sie durch Ihre Arbeitsbereiche und wiederholen Sie den Vorgang: Legen Sie eine Kombination von Startsymbolen fest und drücken Sie die Tastenkombination, um sich den Satz für diesen bestimmten Arbeitsbereich zu merken.
Sie sind jetzt praktisch fertig. Führen Sie das Hintergrundskript mit dem Befehl aus (lassen Sie es in einem Terminalfenster laufen):
python3 /path/to/launcher_perworkspace.py
Wenn alles einwandfrei funktioniert und Ihr Launcher pro Arbeitsbereich wechselt, fügen Sie den Startanwendungen den folgenden Befehl hinzu: Dash> Startanwendungen> Hinzufügen:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Anmerkungen
- Wenn Sie die Startsymbole für einen bestimmten Arbeitsbereich ändern möchten, navigieren Sie einfach zum Arbeitsbereich, fügen Sie Symbole hinzu oder entfernen Sie sie, und drücken Sie die Tastenkombination (das Hintergrundskript muss nicht neu gestartet werden).
- Aus den Kommentaren ergibt sich das Gefühl, dass die Verknüpfung ein Missverständnis enthält, um den aktuellen Launcher für den aktuellen Arbeitsbereich zu speichern. Sie benötigen nur eine Tastenkombination, um den aktuellen Starter für den aktuellen Arbeitsbereich zu "speichern". Es funktioniert genauso, egal auf welchem Arbeitsplatz Sie sich befinden. Das Skript selbst bestimmen , was ist der aktuelle Arbeitsbereich.
Bearbeiten
Aus Ihrem Kommentar geht hervor, dass Sie sich nicht sicher sind, ob Sie die Skripte ausführen sollen, und befürchten, dass Sie Ihren aktuellen Launcher durcheinander bringen werden.
Ich bin mir ziemlich sicher, dass das zu viel (oder zu wenig :) Respekt für das ist, was das Skript tut. Sie können Ihren aktuellen Unity Launcher jedoch einfach mit dem folgenden Befehl sichern:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Dadurch wird eine Datei erstellt ~/launcher_output
, die den vollständigen Befehl zum Wiederherstellen des Unity Launcher in der Ausgangssituation enthält. Kopieren Sie im Notfall einfach den Inhalt der Datei und fügen Sie ihn in das Terminal ein.
Aber auch hier ist es sehr unwahrscheinlich, dass Sie Ihren Launcher durcheinander bringen, es sei denn, Sie ändern das Skript manuell.
WICHTIGE ÄNDERUNG (2)
Wie in einem Kommentar gefordert, hiermit eine Version, die ausgeführt wird, ohne dass eine Tastenkombination verwendet werden muss; Führen Sie einfach das Skript aus und richten Sie Ihre Startprogramme in den jeweiligen Arbeitsbereichen ein. Das Skript erstellt (unsichtbare) Dateien in Ihrem Ausgangsverzeichnis, um sich an Ihre (Unity-) Starter auf den verschiedenen Arbeitsbereichen zu erinnern.
Ich habe dies in "Version 1" des Skripts versucht, aber immer "eingebettet" die zwei Starterprüfungen zwischen zwei Arbeitsbereichprüfungen erwies sich als der Trick, um unerwünschtes Verhalten (Speichern falscher Daten) beim schnellen Durchlaufen der Arbeitsbereiche zu verhindern.
Wie benutzt man
Wie die erste Version verwendet dieses Skript wmctrl
:
sudo apt-get install wmctrl
Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter launcher_toworkspace.py
Führen Sie es mit dem Befehl aus:
python3 /path/to/launcher_toworkspace.py
Fügen Sie den Startup Applications den folgenden Befehl hinzu, wenn es erwartet funktioniert:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
Das Drehbuch
#!/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()
Hinweis
Wenn Sie Ihre Arbeitsbereiche mit der vorherigen Version des Skripts eingerichtet haben, sollten sie auch für diese Version funktionieren.
PPA
Bis zum 23.04.2015 haben die nette Frage von Dennis J und die Ermutigung von Parto dazu geführt, ein ppa
für das Skript, das auf webupd8 behandelt wird, zu erstellen , einschließlich einer GUI, um es zu verwalten.
ppa:vlijm/lswitcher
Führen Sie zum Installieren Folgendes aus:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Seitdem ist es für Trusty & Utopic verpackt. Ich werde andere nach dem Testen hinzufügen. Ich werde auch ein .deb
Installationsprogramm hinzufügen , aber ich würde vorschlagen, das zu verwenden ppa
, da diese Art von Dingen normalerweise von Zeit zu Zeit aktualisiert wird.
Da sich der Speicherort der Ansichtsfensterdaten von ~/
zu geändert hat ~/.config/lswitcher
, müssen Sie Ihren Unity Launcher erneut einrichten, wenn Sie das vorherige Skript verwendet haben.