Configuración de Unity Launcher diferente por espacio de trabajo:
1. 2. 3. 4.
La solución a continuación hace que sea posible tener fácilmente un conjunto diferente de iconos de iniciador por espacio de trabajo, sin importar cuántos espacios de trabajo tenga.
La configuración incluye dos partes:
Una (una) combinación de teclas de acceso directo para "recordar" el conjunto de iconos de iniciador para el espacio de trabajo actual.
Un script para ejecutar en segundo plano, realizar un seguimiento de cuál es el espacio de trabajo actual y configurar el Unity Launcher correspondiente. Actúa cada vez que el usuario cambia de espacio de trabajo.
Cómo funciona
Están involucrados dos pequeños guiones:
El primer script hace una cosa simple: escribe el contenido del iniciador actual en un archivo (oculto) en su directorio de inicio, llamado (numerado) después de su espacio de trabajo actual.
El segundo script vigila cuál es el espacio de trabajo actual. Si hay un cambio en el espacio de trabajo , el script ve si existe un archivo de datos correspondiente (lanzador) (creado por el primer script). Si es así, lee el archivo y altera el Iniciador de Unity, como se recuerda en el archivo.
Eso es.
Como instalar
El script debe wmctrl
estar instalado:
sudo apt-get install wmctrl
Cree un directorio en el que se almacenarán ambos scripts . Es importante que ambos scripts se mantengan juntos en un directorio, ya que comparten funcionalidad y uno importa del otro. Por la misma razón, es importante que los nombre exactamente como se indica a continuación.
Copie cada uno de los scripts a continuación en un archivo vacío (diferente), guárdelos en el directorio (creado en 2.
), exactamente nombrado como:
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
Agregue el primer script ( set_workspace.py
) a la combinación de teclas de acceso directo que prefiera: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:
python3 /path/to/set_workspace.py
Ejecute la combinación de teclas y vea si .launcher_data_3
se crea un archivo, como: en su directorio de inicio. Probablemente necesitará presionar Ctrl+ Hpara que el archivo sea visible (los archivos, comenzando con a, .
son invisibles por defecto).
Navegue a través de sus espacios de trabajo y repita el procedimiento: configure una combinación de iconos de iniciador y presione la combinación de teclas para "recordar" el conjunto para ese espacio de trabajo específico.
Prácticamente has terminado ahora. Pruebe y ejecute el script de fondo con el comando (desde una ventana de terminal, manténgalo ejecutándose):
python3 /path/to/launcher_perworkspace.py
Si todo funciona bien y su lanzador cambia por espacio de trabajo, agregue el siguiente comando a sus aplicaciones de Inicio: Tablero> Aplicaciones de inicio> Agregar:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Notas
- Si desea modificar el conjunto de iconos del iniciador para un espacio de trabajo específico, simplemente navegue hasta el espacio de trabajo, agregue / elimine los iconos que desee y presione la combinación de teclas (no es necesario reiniciar el script de fondo).
- De los comentarios tengo la sensación de que hay un malentendido en el acceso directo para recordar el Iniciador actual para el espacio de trabajo actual. Solo necesita un método abreviado de teclado para "guardar" el iniciador actual para el espacio de trabajo actual. Funcionará exactamente igual, sin importar en qué espacio de trabajo se encuentre. El script en sí determinará cuál es el espacio de trabajo actual.
Editar
Por su comentario, entiendo que no está seguro de ejecutar los scripts y tiene miedo de estropear su iniciador actual.
Estoy bastante seguro de que es demasiado (o muy poco :) respeto por lo que está haciendo el guión. Sin embargo, simplemente puede hacer una copia de seguridad de su Unity Launcher actual con el comando:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Esto creará un archivo que ~/launcher_output
contiene el comando completo para restaurar su Unity Launcher a la situación inicial. En caso de emergencia, simplemente copie el contenido del archivo y péguelo en el terminal.
Pero, de nuevo, es muy poco probable que arruines tu lanzador, a menos que cambies el script manualmente.
EDICIÓN IMPORTANTE (2)
Como se solicitó en un comentario, por la presente una versión que se ejecuta sin tener que usar ninguna combinación de atajos; simplemente ejecute el script y comience a configurar sus lanzadores en los espacios de trabajo específicos. El script creará archivos (invisibles) en su directorio de inicio, para recordar su conjunto de lanzadores (Unity-) en los diferentes espacios de trabajo.
Intenté esto en la "versión 1" del script, pero siempre "incrustando" las dos comprobaciones del iniciador entre dos comprobaciones del espacio de trabajo resultó ser el truco para evitar comportamientos no deseados (guardar datos incorrectos) al moverse rápidamente por los espacios de trabajo.
Cómo utilizar
Al igual que la primera versión, este script usa wmctrl
:
sudo apt-get install wmctrl
Copie el script en un archivo vacío, guárdelo como launcher_toworkspace.py
Ejecútelo con el comando:
python3 /path/to/launcher_toworkspace.py
Si funciona como se espera, agregue el siguiente comando a sus aplicaciones de inicio:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
La secuencia de comandos
#!/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()
Nota
Si configura sus espacios de trabajo con la versión anterior del script, también deberían funcionar para esta versión.
PPA
Según el 23/04/2015, la buena pregunta de Dennis J, y el aliento de Parto, han llevado a la creación de un ppa
guión, cubierto en webupd8 , que incluye una GUI para administrarlo.
ppa:vlijm/lswitcher
Para instalarlo, ejecute:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Desde ahora, está empaquetado para Trusty & Utopic. Agregaré otros después de la prueba. También agregaré un .deb
instalador, pero sugeriría usar el ppa
, ya que generalmente este tipo de cosas se actualiza de vez en cuando.
Dado que la ubicación de los datos de la ventana gráfica ha cambiado de ~/
a ~/.config/lswitcher
, tendrá que configurar su Unity Launcher nuevamente si utilizó el script anterior.