¿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, porquexdotoolno 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
xdotoolpuede 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
-vmarca para especificar coordenadas manualmente o puede usar una-gmarca para abrir el cuadro de diálogo GUI.-fflag 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 gitcd /opt ; sudo git clone https://github.com/SergKolo/sergrep.gitsudo chmod -R +x sergrepEl archivo de script será
/opt/sergrep/move_viewport_windows.shPara enlazar el script al acceso directo, consulte ¿Cómo enlazo archivos .sh a la combinación de teclado?
Tenga en cuenta que
wmctrlyxdotoolson 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
gridcomplemento 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-tooly 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
wmctrlyxdotoolpara 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' ' -f1Enumere 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
$ial espacio de trabajo 2.todo esto está empaquetado en un
while read ... do; donebucle 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