XFCE - Enviar ventana a otro monitor al presionar una tecla

27

Estoy ejecutando Xubuntu 11.10 con una configuración de monitor dual. Estoy buscando crear una pulsación de tecla (tal vez CTRL+ ALT+ SPACEque me permitirá enviar una ventana seleccionada al siguiente monitor.

En GNOME hay un paquete llamado swapmonitorque es capaz de enviar la ventana al otro monitor. Llamar a este programa con una pulsación de tecla logra el mismo efecto.

¿Cómo se hace esto en XFCE / Xubuntu?

científico
fuente
¿No tienes acceso a swapmonitorXubuntu? ¿O estás preguntando cómo configurar un atajo de teclado para él?
ire_and_curses
No parece funcionar en XFCE. Aunque me gustaría saber qué opciones hay.
boffin
¿Cómo se configuran los monitores múltiples? ¿Como una gran pantalla virtual o pantallas X separadas? ¿Estás usando nvidia twinview?
Keith
Es TwinView. Tengo una vieja tarjeta Nvidia GeForce con 2 monitores Dell de 19 "
boffin

Respuestas:

27

Esto se publicó hace un tiempo y estoy seguro de que ya ha recibido su respuesta, pero para aquellos que no.

Ejecute estos comandos

sudo apt-get install xdotool
sudo apt-get install wmctrl

Luego descargue el script bash del siguiente enlace (crédito a jc00ke) https://github.com/jc00ke/move-to-next-monitor

Personalmente, tengo un directorio en mi raíz donde almaceno todos mis scripts personales. Sin embargo, donde lo descargues realmente depende de ti. Cámbielo para tener permisos para que pueda ejecutar. Por ejemplo, guarde los scripts como move-to-next-monitor.sh y luego ejecute lo siguiente

chmod 755 move-to-next-monitor.sh
  1. administrador de configuración -> teclado -> accesos directos a aplicaciones
  2. Haga clic en Agregar
  3. Haga clic en Abrir y diríjalo a su script
  4. Asigne un atajo de teclado y ¡voilà!

Ahora tiene un método abreviado de teclado para cambiar una ventana de una pantalla a otra. No estoy seguro de cómo funciona con más de 2 pantallas.

itzjustricky
fuente
El script vinculado tenía este problema para mí: github.com/jc00ke/bin/issues/1
thejoshwolfe
1
Hasta ahora me ha funcionado bien con Mint 17.3 y xfce 4.12, tarjeta de video ati chipset y tres monitores. No veo el problema de maximización de thejoshwolfe en mi sistema. ¡Gracias por los consejos!
ether_joe
1
@thejoshwolfe He agregado mi versión del script que resuelve el problema de maximizar para mí.
jbrock
1
@ether_joe He agregado mi versión del script que puede beneficiarlo dado que tiene tres monitores.
jbrock
Estoy en xfce, y esto es malo. Solo moverá la ventana desde el monitor izquierdo hacia la derecha, y pondrá mi escritorio en un estado realmente extraño una vez.
Sava B.
10

He realizado algunos cambios en el script mencionado anteriormente, creado originalmente por jc00ke.
- El mío está configurado para tres monitores.
- Mantiene si la ventana se maximizó o no.
- Se utiliza para mover la ventana hacia la izquierda o hacia la derecha con el uso script-name -ly script-name -rrespectivamente.
- Agregué una solución donde las aplicaciones de Chromium cuando se minimizan son muy pequeñas y no se maximizan nuevamente en el nuevo monitor.
Me correspondí con jc00ke. Si bien esto funciona muy bien en Xfce, dijo que tenía problemas con su guión en Unity. Por supuesto, otros entornos de escritorio como Unity no necesitarían este script porque tales opciones están integradas en el administrador de ventanas.
Para utilizar el guión make ejecutable chmod +x script-namee instalar los dos programas siguientes, sudo apt-get install xdotool wmctrl.

#!/bin/bash
#
# Move the current window to the next monitor.
#
# Also works only on one X screen (which is the most common case).
#
# Props to
# http://icyrock.com/blog/2012/05/xubuntu-moving-windows-between-monitors/
#
# Unfortunately, both "xdotool getwindowgeometry --shell $window_id" and
# checking "-geometry" of "xwininfo -id $window_id" are not sufficient, as
# the first command does not respect panel/decoration offsets and the second
# will sometimes give a "-0-0" geometry. This is why we resort to "xwininfo".

screen_width=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $7 }')
screen_height=$(xdpyinfo | awk -F" |x" '/dimensions:/ { print $8 }')
window_id=$(xdotool getactivewindow)

case $1 in
    -l )
        display_width=$((screen_width / 3 * 2)) ;;
    -r )
        display_width=$((screen_width / 3)) ;;
esac

# Remember if it was maximized.
window_state=$(xprop -id $window_id _NET_WM_STATE | awk '{ print $3 }')

# Un-maximize current window so that we can move it
wmctrl -ir $window_id -b remove,maximized_vert,maximized_horz

# Read window position
x=$(xwininfo -id $window_id | awk '/Absolute upper-left X:/ { print $4 }')
y=$(xwininfo -id $window_id | awk '/Absolute upper-left Y:/ { print $4 }')

# Subtract any offsets caused by window decorations and panels
x_offset=$(xwininfo -id $window_id | awk '/Relative upper-left X:/ { print $4 }')
y_offset=$(xwininfo -id $window_id | awk '/Relative upper-left Y:/ { print $4 }')
x=$((x - x_offset))
y=$((y - y_offset))

# Fix Chromium app view issue of small un-maximized size
width=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $4 }')
if [ "$width" -lt "150" ]; then
  display_width=$((display_width + 150))
fi

# Compute new X position
new_x=$((x + display_width))
# Compute new Y position
new_y=$((y + screen_height))

# If we would move off the right-most monitor, we set it to the left one.
# We also respect the window's width here: moving a window off more than half its width won't happen.
if [ $((new_x + width / 2)) -gt $screen_width ]; then
  new_x=$((new_x - screen_width))
fi

height=$(xdotool getwindowgeometry $window_id | awk -F" |x" '/Geometry:/ { print $5 }')
if [ $((new_y + height / 2)) -gt $screen_height ]; then
  new_y=$((new_y - screen_height))
fi

# Don't move off the left side.
if [ $new_x -lt 0 ]; then
  new_x=0
fi

# Don't move off the bottom
if [ $new_y -lt 0 ]; then
  new_y=0
fi

# Move the window
xdotool windowmove $window_id $new_x $new_y

# Maintain if window was maximized or not
if [ "${window_state}" = "_NET_WM_STATE_MAXIMIZED_HORZ," ]; then
    wmctrl -ir $window_id -b add,maximized_vert,maximized_horz
fi
jbrock
fuente
7

También creé mi propio script de Python para mover ventanas a través de monitores.

https://github.com/calandoa/movescreen

Uso:

movescreen.py <up|down|left|right>

Características interesantes:

  • manejar las 4 direcciones
  • manejar algunos casos especiales como ventanas que se superponen en varios monitores
  • Restaurar independientemente a pantalla completa , maximizado horizontal y verticalmente estados
  • depurar o agregar nuevas funciones fácilmente con python.
calandoa
fuente
1

Otra alternativa que no depende de ninguna dependencia "binaria" (como xdotool o wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Puede instalarlo con pip(no es necesario copiarlo manualmente, hacerlo ejecutable, etc.)
  • Maneja múltiples pantallas con diferentes diseños (horizontal, vertical, mixto)
  • Mantenga la relación ventana / pantalla cuando se mueva entre pantallas de diferentes tamaños
  • Restaurar estados maximizados (horizontal, vertical)

Tipo.

AlexisBRENON
fuente