Me gusta mucho Hot Corners. :-)
¿De alguna manera es posible ejecutar un comando personalizado en una esquina activa como se muestra a continuación?
Me gusta mucho Hot Corners. :-)
¿De alguna manera es posible ejecutar un comando personalizado en una esquina activa como se muestra a continuación?
Respuestas:
Instale CompizConfig Settings Manager (CCSM). Ejecutar en terminal:
sudo apt-get install compizconfig-settings-manager
Abrir CCSM.
Ingrese su comando deseado en una de las ranuras. P.ej:
Vaya a la pestaña "Vinculaciones de bordes"
Haga clic en "Ninguno" y configure la esquina activa (o borde) deseada, que corresponde al comando que acaba de configurar
Mueve el mouse hacia la esquina
Ahora su comando se ejecuta!
Confirmado trabajando el 14.04.
Si está utilizando Unity y tiene instalado ccsm, la respuesta de wjandrea es su respuesta, por supuesto. Si no , o para usar en otras distribuciones, una alternativa ligera podría ser útil.
Con el siguiente script, puede configurar cualquier comando, específico para cada uno de sus hotcorners.
Como ejemplo, hice la siguiente configuración:
Por supuesto, también puede hacer que los comandos ejecuten scripts externos.
Además, puede establecer el tamaño de la esquina activa en la línea:
cornersize = 10
Simplemente cambie el valor (píxeles). El script establece áreas (cuadradas) para activar sus comandos:
#!/usr/bin/env python3
import subprocess
import time
cornersize = 20
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
match1 = None
while True:
time.sleep(1)
xy = get_pos()
x = xy[0]; y = xy[1]
test = [
[x < cornersize, y < cornersize],
[x > res[0]-cornersize, y < cornersize],
[x < cornersize, y > res[1]-cornersize],
[x > res[0]-cornersize, y > res[1]-cornersize],
]
match2 = [i for i, p in enumerate(test) if all(p)]
if match2 != match1:
if match2:
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
El guión necesita xdotool
sudo apt install xdotool
hotcorners2.py
En la cabeza del guión, configure sus comandos (tenga en cuenta las comillas)
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
(posteriormente arriba a la izquierda / derecha, abajo a la izquierda / derecha)
Prueba: ejecuta el script:
python3 /path/to/hotcorners2.py
Si todo funciona bien, agréguelo a Aplicaciones de inicio: Tablero> Aplicaciones de inicio> Agregar. Agrega el comando:
/bin/bash -c "sleep 5 && python3 /path/to/hotcorners2.py"
Si usamos una informática un poco más avanzada, podemos usar un radio en lugar de un área cuadrada para activar los comandos (gracias a la buena @pythagoras):
Pequeña diferencia, pero solo por diversión:
#!/usr/bin/env python3
import subprocess
import math
import time
# set distance (hotcorner sensitivity)
radius = 20
# top-left, top-right, bottom-left, bottom-right
commands = [
None,
"gedit",
None,
"gnome-terminal",
]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def get_pos():
return [int(s.split(":")[1]) for s in get(["xdotool", "getmouselocation"]).split()[:2]]
# get the resolution
scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
res = [int(n) for n in scrdata[resindex].split("+")[0].split("x")]
# list the corners, could be more elegant no doubt
corners = [[0, 0], [res[0], 0], [0, res[1]], [res[0], res[1]]]
match1 = None
while True:
time.sleep(1)
pos = get_pos()
# get the current difference from the mousepointer to each of the corner (radius)
diff = [int(math.sqrt(sum([(c[i]-pos[i])**2 for i, n in enumerate(res)])))\
for c in corners]
# see if any of the corners is "approached" within the radius
match2 = [diff.index(n) for n in diff if n < radius]
# if so, and the corresponding command is not set to None, run it.
if all([match2 != match1, match2]):
cmd = commands[match2[0]]
if cmd:
subprocess.Popen(["/bin/bash", "-c", cmd])
match1 = match2
Es más o menos lo mismo. Establezca sus comandos, y el radio para disparar, en la sección principal del script.
La respuesta de wjandrea es la respuesta más adecuada para alguien que usa Ubuntu o Ubuntu Kylin predeterminados (o tiene compiz como su administrador de pantalla), por lo que recibe mi voto positivo y respeto. La respuesta proporcionada a continuación, también se puede usar en Unity, pero probablemente sería un poco redundante. Sin embargo, en entornos de escritorio que no tienen compiz, uno puede usar el indicador presentado a continuación. Lo probé brevemente en Lubuntu 16.04 VM, así que sé que funciona allí, y también lo hice compatible con Kylin 14.04. Para los escritorios GNOME y MATE, primero deberá tener soporte para AppIndicators habilitado para poder usar cualquier indicador.
He implementado lo indicator-edger
que permite activar comandos definidos por el usuario basados en la posición del mouse en cualquier lugar a lo largo de los 4 bordes de la pantalla. La versión original se realizó dentro de un día, en aproximadamente 7 horas, por lo tanto, es bastante minimalista pero hace el trabajo.
El indicador se controla mediante un ~/.edger-commands.json
archivo, obviamente en json
formato. El usuario puede escribirlo manualmente o configurarlo mediante la DEFINE COMMANDS
opción del indicador . La opción de activación / desactivación de activación se recuerda y se escribe automáticamente en el archivo para comodidad del usuario. El archivo de configuración de muestra sería así:
{
"right": "gnome-terminal",
"top": "firefox",
"left": "",
"bottom": "gnome-screenshot",
"enabled": true
}
Anote la "left"
entrada en el archivo. Ese borde no está definido, pero debido a la json
sintaxis requiere tener una cadena vacía allí, es decir, comillas ""
.
Una vez que el indicador detecta que el usuario ha colocado el mouse a lo largo de cualquiera de los bordes (con un margen de ~ 3 píxeles), el indicador enviará una notificación de burbuja y ejecutará el comando apropiado (si está definido). La activación del disparador no se repetirá a menos que el usuario aleje el mouse del borde.
Como puede ver en la captura de pantalla anterior, el indicador también tiene salida de depuración en la línea de comandos. Si encuentra algún error, siéntase libre de ejecutarlo desde la terminal, averiguar qué error ocurre y enviar el informe de error apropiado en la página de problemas del GitHub del proyecto .
Actualmente no hay soporte para esquinas (solo bordes) y se creó para la configuración de un monitor (obviamente, no se pueden cubrir todas las bases dentro de las 7 horas posteriores a la creación), pero esas características podrían estar disponibles eventualmente en el futuro.
El código fuente está disponible en la página de proyectos de GitHub o mediante Launchpad . La instalación se realiza mediante los siguientes comandos en la terminal:
sudo add-apt-repository ppa:1047481448-2/sergkolo
sudo apt-get update
sudo apt-get install indicator-edger