web-dev-qa-db-fra.com

Xfce - Envoyer la fenêtre à un autre moniteur sur Keystroke

Je suis en cours d'exécution Xubuntu 11.10 avec une configuration à double moniteur. Je cherche à créer une frappe (peut-être CTRLALTSPACE Ce qui me permettra d'envoyer une fenêtre sélectionnée sur le moniteur suivant.

Dans GNOME, il y a un package appelé swapmonitor qui est capable d'envoyer la fenêtre à l'autre moniteur. Appeler ce programme avec une frappe frappe le même effet.

Comment est-ce fait dans Xfce/Xubuntu?

29
boffin

Cela a été posté il y a quelque temps et je suis sûr que vous avez déjà reçu votre réponse, mais pour ceux qui ne l'ont pas fait.

Exécutez ces commandes

Sudo apt-get install xdotool
Sudo apt-get install wmctrl

Ensuite, téléchargez le script Bash à partir du lien suivant (crédit à JC00ke) https://github.com/jc00ke/move-to-next-monitor

Personnellement, j'ai un répertoire dans ma racine où je stocke tous mes scripts personnels. Cependant, où vous le téléchargez, c'est vraiment à vous. Changez-le pour avoir des autorisations afin que vous puissiez exécuter. Par exemple, enregistrez les scripts comme boucle-to-next-monitor.sh, puis exécutez ce qui suit

chmod 755 move-to-next-monitor.sh
  1. réglages Manager -> Clavier -> Raccourcis d'application
  2. Cliquez sur Ajouter
  3. Cliquez sur Ouvrir et dirigez-le sur votre script
  4. Attribuez un raccourci clavier à celui-ci et de Voilà!

Vous avez maintenant un raccourci clavier pour changer une fenêtre de 1 écran à un autre. Je ne sais pas comment cela fonctionne avec plus de 2 écrans.

29
itzjustricky

J'ai apporté des modifications au script ci-dessus mentionné, à l'origine rédigé par JC00ke.
[.____] - Le mien est mis en place pour trois moniteurs.
[.____] - Il maintient si la fenêtre a été maximisée ou non.
[.____] - Il est utilisé pour déplacer la fenêtre à gauche ou à droite avec l'utilisation script-name -l et script-name -r respectivement.
[.____] - J'ai ajouté une solution où les applications de chrome lorsqu'ils sont minimisées sont très petites et ne maximisent plus à nouveau sur le nouveau moniteur.
[.____] J'ai correspondu avec JC00ke. Bien que cela fonctionne bien sur XFCE, il a dit qu'il avait des problèmes avec son script dans l'unité. Bien sûr, d'autres environnements de bureau tels que Unity n'auraient pas besoin de ce script, car de telles options sont intégrées au gestionnaire de fenêtres.
[.____] Pour utiliser le script, faites-la exécuter chmod +x script-name et installer les deux programmes suivants, 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
11
jbrock