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 .gvimrcand 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-terminaly 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-size46% 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
xdotoolywmctrl. Utilicé ambos, ya que cambiar el tamaño conwmctrlpuede causar algunas peculiaridades en (específicamente)Unity.setwindow(sin extensión) en~/bin; cree el directorio si es necesario.~bin, ejecute:source ~/.profilePruebe 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
wmctrloxdotool, 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 lainkscapeventana se colocó en laxposición 0, aún se puede ver una pequeña marca entre el Iniciador de Unity y lainkscapeventana.fuente
wmctrlinstalado, 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
$HALFa las dimensiones de su pantalla) y se ajuste al lado izquierdo. Para girar a la derecha, useTambién puedes jugar
wmctrlpara 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 wmctrlmá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,xdpyinfoydisperpara ser instalado:Luego, guarde el script a continuación como
~/bin/snap_windows.sh, hágalo ejecutablechmod a+x ~/bin/snap_windows.shy puede ejecutarPara encajar a la derecha. Use
lpara 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
xdotoolpuedes ejecutar:Luego, para enviar una pulsación de tecla Ctrl+ Alt+ <keypad_key>a la
Xventana 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
Xventana (que en este caso es la ventana activa en el momento de laxdotoolejecució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 contrarioxdotoolno 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 retraso500msdebería ser suficiente).Los valores posibles para
<keypad_key_value>son:90878889838485798081Como regla general, para averiguar el valor de cualquier tecla del teclado dentro del
Xentorno, se puede ejecutarxevy 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
setwindowcongedit --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