Me pregunto si hay alguna forma de lograr el efecto de los atajos de teclado Ctrl-Alt-Teclado en Unity utilizando comandos de terminal. Quiero un comando que establezca una ventana de interfaz gráfica de usuario a la mitad del tamaño de la pantalla, alineada a izquierda o derecha.
A modo de fondo, estoy escribiendo un script que se ejecuta después de iniciar sesión. Utiliza Zenity para preguntar si quiero abrir o no mi entorno de desarrollo (GVim e IPython uno al lado del otro). He estado tratando de lograr dos ventanas de igual tamaño para estos programas usando set lines= columns=
my .gvimrc
and c.IPythonWidget.width =
y c.IPythonWidget.height =
my ipython_qtconsole_config.py
. Sin embargo, hay problemas asociados con este enfoque.
Respuestas:
En qué te encontrarás
Si primero desea llamar a una aplicación y, posteriormente, colocar su ventana en una posición y tamaño específicos, el tiempo entre la llamada a la aplicación y el momento en que aparece la ventana es impredecible. Si su sistema está ocupado, puede ser significativamente más largo que si está inactivo.
Necesita una forma "inteligente" para asegurarse de que el posicionamiento / cambio de tamaño se realice (inmediatamente) después de que aparezca la ventana .
Script para llamar a una aplicación, espere a que aparezca y colóquelo en la pantalla
Con el siguiente script, puede llamar a una aplicación y establecer la posición y el tamaño en el que debería aparecer con el comando:
Algunos ejemplos
Para llamar
gnome-terminal
y redimensionar su ventana al 50% y colocarla en la mitad derecha:Para llamar
gedit
, coloque su ventana a la izquierda y llamegnome-terminal
, colóquela a la derecha (estableciendo suv-size
46% para darle un poco de espacio entre las ventanas):Para llamar a Inkscape, coloque su ventana en el cuarto izquierdo / superior de la pantalla:
El guión y cómo usarlo
instalar ambos
xdotool
ywmctrl
. Utilicé ambos, ya que cambiar el tamaño conwmctrl
puede causar algunas peculiaridades en (específicamente)Unity
.setwindow
(sin extensión) en~/bin
; cree el directorio si es necesario.~bin
, ejecute:source ~/.profile
Pruebe y ejecute el script con el comando (por ejemplo)
En otras palabras:
Si todo funciona bien, use el comando donde lo necesite.
La secuencia de comandos
Que hace
Cuando se llama al script, se:
wmctrl -lp
)ps -ef ww
, comparando el pid de la ventana con el pid de la aplicación)Problema menor
En Unity, cuando (re) posiciona y (re) dimensiona una ventana con
wmctrl
oxdotool
, la ventana siempre mantendrá un pequeño margen en los bordes de su pantalla, a menos que lo establezca al 100%. Puedes ver eso en la imagen (3) arriba; Si bien lainkscape
ventana se colocó en lax
posición 0, aún se puede ver una pequeña marca entre el Iniciador de Unity y lainkscape
ventana.fuente
wmctrl
instalado, el comando:wmctrl -lG | grep <windowname>
le mostrará una salida como:0x03600e4f 0 723 197 1114 563 jacob-System-Product-Name dimkeyboard.sh (~/Bureaublad) - gedit
. En esta salida, la columna 3 a 6 muestra las dimensiones, x, y, ancho, ancho, alto.appAndParams = sys.argv[1] app = appAndParams[0].split(' ', 1)[0] get = lambda x: subprocess.check_output(["/bin/bash", "-c",x]).decode("utf-8") ws1 = get("wmctrl -lp"); t = 0 subprocess.Popen(["/bin/bash", "-c", appAndParams])
</pre> <edit> se niega a formatear ese código. </edit>El comando real que quieres es algo así como
Eso hará que la ventana actual ocupe la mitad de la pantalla (cambie
$HALF
a las dimensiones de su pantalla) y se ajuste al lado izquierdo. Para girar a la derecha, useTambién puedes jugar
wmctrl
para obtener la identificación de las ventanas que te interesan en lugar de usar:ACTIVE:
. Sin embargo, no puedo ayudar ya que eso depende de las ventanas en cuestión. Echa un vistazo aman wmctrl
más.He escrito un guión para eso. No uso Unity, así que no puedo garantizar que funcione con él, pero no veo ninguna razón por la que no. Necesita
wmctrl
,xdpyinfo
ydisper
para ser instalado:Luego, guarde el script a continuación como
~/bin/snap_windows.sh
, hágalo ejecutablechmod a+x ~/bin/snap_windows.sh
y puede ejecutarPara encajar a la derecha. Use
l
para el lado izquierdo y sin argumentos para maximizar la ventana. Tenga en cuenta que se ejecuta en la ventana actual, por lo que deberá asignarle un acceso directo si desea que se ejecute en cualquier cosa que no sea el terminal.El script es un poco más complicado de lo que pides porque lo he escrito para que funcione en configuraciones de monitor único y dual.
fuente
Puedes hacer esto usando
xdotool
.Para instalar
xdotool
puedes ejecutar:Luego, para enviar una pulsación de tecla Ctrl+ Alt+ <keypad_key>a la
X
ventana de terminal , puede ejecutar:* <keypad_key_value> = valor de la tecla del teclado en la lista a continuación
Para ejecutar un programa GUI y enviar la combinación de teclas a su
X
ventana (que en este caso es la ventana activa en el momento de laxdotool
ejecución del comando) puede ejecutar:* <comando> = comando que abre la ventana a la que desea enviar la pulsación de tecla; <delay> = tiempo de espera en milisegundos antes de enviar la pulsación de tecla; <keypad_key_value> = valor de la tecla del teclado en la lista a continuación
Tenga en cuenta que en la mayoría de los casos necesitará ejecutar el comando que está emitiendo como un proceso independiente (por ejemplo, ejecutando en
nohup <command> &
lugar del<command>
ejemplo anterior), de lo contrarioxdotool
no se ejecutará hasta que<command>
se complete la ejecución.También deberá establecer un retraso, de lo contrario, la pulsación de tecla se enviará antes de que la ventana de destino esté completamente cargada
X
(un retraso500ms
debería ser suficiente).Los valores posibles para
<keypad_key_value>
son:90
87
88
89
83
84
85
79
80
81
Como regla general, para averiguar el valor de cualquier tecla del teclado dentro del
X
entorno, se puede ejecutarxev
y presionar la tecla para generar su valor dentro del terminal.fuente
He creado una aplicación llamada Worksets (en github ) para Unity que te permite hacer esto fácilmente a través de una interfaz gráfica de usuario: es gratuita y de código abierto.
Básicamente es un envoltorio para las soluciones wmctrl y xdotool enumeradas como respuestas aquí, y proporciona una manera fácil de hacer y guardar rápidamente tales configuraciones.
fuente
No tengo el representante para comentar directamente sobre la excelente publicación de Jacob Vlijm, pero modifiqué el script para permitir iniciar una aplicación con argumentos (necesarios para usar
setwindow
congedit --new-window
). Cambio:a:
fuente
Jugué con el guión de Terdon desde arriba y agregué algunas cosas nuevas (capacidad de seleccionar el monitor y establecer la altura para cada monitor). Sería extensible agregar más monitores, creo. Esperemos que otros lo encuentren útil.
Sintaxis básica:
Donde nombre_programa es lo que guardó este código como; monitor es el número de monitor, por ejemplo, 1 o 2; l / r / m es izquierda o derecha o max; y window_name es el nombre (o una fracción de su nombre) de la ventana de destino.
P.ej:
Guión Bash
fuente