¿Es posible mover todas las ventanas (o todas las ventanas no minimizadas) de un espacio de trabajo a otro?
Sé que puedo mover una ventana a otro espacio de trabajo con Shift+ Ctrl+ Alt+ arrow, pero moverá solo esa ventana enfocada.
unity
compiz
workspaces
viewports
betatester07
fuente
fuente
Respuestas:
Unidad: ¿Qué son los Viewports?
Ubuntu Unity usa viewports, básicamente un sistema de coordenadas (con la coordenada 0,0 en la esquina superior izquierda), donde un escritorio gigante se subdivide en fragmentos que se ajustan a la resolución de su pantalla. Las coordenadas crecen en valor a medida que se mueve hacia la derecha y hacia abajo.
El sistema de coordenadas es relativo. Si mi ventana gráfica actual está en la parte superior izquierda, todo lo relativo a esa ventana gráfica tendrá valores positivos en incrementos de ancho y alto. Por ejemplo, si mi ventana de visualización actual está en la parte superior izquierda, la ventana de Firefox en el espacio de trabajo superior central que ve arriba se coloca en el valor x 1366 y el valor y 0 en relación con la ventana superior izquierda. Si mi ventana activa es la del medio superior, la ventana de terminal en la ventana superior izquierda se coloca en el valor x -1327 60. Este es el tema clave para
xdotool
, porquexdotool
no trata con números negativos.Tenga en cuenta también que la esquina superior izquierda de su ventana gráfica actual siempre será asumida por xdotool como coordenadas 0 0. Eso significa que solo podemos mover cosas de derecha a abajo.
Hacer que xdotool funcione para Unity
Ahora sabemos que
xdotool
puede mover ventanas solo en relación con nuestra esquina superior izquierda (es decir, siempre puede mover ventanas hacia abajo y hacia la derecha, pero nunca hacia arriba y hacia la izquierda). ¿Cómo hacemos que funcione para la unidad? Bueno, la idea básica seríaSolución de secuencias de comandos
El siguiente script realiza exactamente el procedimiento descrito anteriormente. Se puede invocar con una
-v
marca para especificar coordenadas manualmente o puede usar una-g
marca para abrir el cuadro de diálogo GUI.-f
flag le dirá al script que cambie la ventana gráfica también; si esa bandera no se usa, permanecerá en la ventana gráfica actual y solo se moverán las ventanasObteniendo el guión
Se puede copiar el código fuente de esta publicación directamente o mediante github usando los siguientes pasos:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
El archivo de script será
/opt/sergrep/move_viewport_windows.sh
Para enlazar el script al acceso directo, consulte ¿Cómo enlazo archivos .sh a la combinación de teclado?
Tenga en cuenta que
wmctrl
yxdotool
son necesarios para que este script funcione correctamente. Puede instalarlos a través de sudo apt-get install xdotool y wmctrlCódigo fuente
Manifestación
Grabación webm del guión en acción:
https://www.youtube.com/watch?v=cJMlC41CWWo
Cuestiones
Debido al
grid
complemento de Unity que es responsable del ajuste de la ventana, la secuencia de comandos no puede mover las ventanas maximizadas o ajustadas a la derecha / izquierda. Se intentará agregar el desarmado y restablecimiento momentáneo de ese complemento para que el script funcione con todas las ventanas, pero debido a que el desarmado y el restablecimiento tienen un retraso de tiempo, puede ser abandonado como una idea. Si desea que el script funcione con todas las ventanas, instaleunity-tweak-tool
y desactive el ajuste de ventana en las opciones del Administrador de ventanas.fuente
Entornos de escritorio no basados en Compiz (XFCE, LXDE, GNOME, KDE ...)
Puede usar una combinación de
wmctrl
yxdotool
para esto. Primero asegúrese de que estas dos utilidades estén instaladas:Con las dependencias satisfechas, debería poder usar la siguiente línea para mover todas las ventanas del escritorio actual a otra:
Un desglose rápido de los comandos utilizados:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Enumere todas las ventanas, filtre las que no están en el espacio de trabajo actual y extraiga su ID de ventana
wmctrl -i -t 2 -r "$i"
Mueva la ventana con ID de ventana
$i
al espacio de trabajo 2.todo esto está empaquetado en un
while read ... do; done
bucle simple que itera sobre todas las ventanas en el escritorio actualEntornos de escritorio basados en Compiz (por ejemplo, Unity)
Encontrar una solución para entornos de escritorio como Unity se dificulta por el hecho de que Compiz (el administrador de ventanas de Unity) no usa escritorios en un sentido tradicional .
fuente