XFCE - Envoyer la fenêtre à un autre moniteur lors d'une frappe

27

J'utilise Xubuntu 11.10 avec une configuration à deux moniteurs. Je cherche à créer une frappe (peut-être CTRL+ ALT+ SPACEqui me permettra d'envoyer une fenêtre sélectionnée au moniteur suivant.

Dans GNOME, il y a un paquet appelé swapmonitorqui est capable d'envoyer la fenêtre à l'autre moniteur. L'appel de ce programme avec une touche permet d'obtenir le même effet.

Comment cela se fait-il dans XFCE / Xubuntu?

boffin
la source
N'avez-vous pas accès à swapmonitorXubuntu? Ou demandez-vous comment définir un raccourci clavier pour cela?
ire_and_curses
Il ne semble pas fonctionner sur XFCE. Bien que j'aimerais savoir quelles options sont disponibles.
boffin
Comment configurez-vous les différents moniteurs? Comme un grand écran virtuel ou des affichages X séparés? Utilisez-vous nvidia twinview?
Keith
C'est TwinView. J'ai une vieille carte Nvidia GeForce avec 2 moniteurs Dell 19 "
boffin

Réponses:

27

Cela a été publié il y a un moment et je suis sûr que vous avez déjà obtenu votre réponse, mais pour ceux qui ne l'ont pas déjà fait.

Exécutez ces commandes

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

Téléchargez ensuite 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, là où vous téléchargez, c'est vraiment à vous de décider. Modifiez-le pour avoir des autorisations afin que vous puissiez exécuter. Par exemple, enregistrez les scripts sous move-to-next-monitor.sh, puis exécutez ce qui suit

chmod 755 move-to-next-monitor.sh
  1. gestionnaire de paramètres -> clavier -> raccourcis d'application
  2. Cliquez sur Ajouter
  3. Cliquez sur Ouvrir et dirigez-le vers votre script
  4. Attribuez-lui un raccourci clavier et voilà!

Vous disposez désormais d'un raccourci clavier pour basculer d'une fenêtre d'un écran à un autre. Je ne sais pas comment cela fonctionne avec plus de 2 écrans.

itzjustricky
la source
Le script lié a eu ce problème pour moi: github.com/jc00ke/bin/issues/1
thejoshwolfe
1
Jusqu'à présent, ça marche pour moi avec Mint 17.3 et xfce 4.12, la carte vidéo du chipset ati et trois moniteurs. Ne pas voir le problème de maximisation de thejoshwolfe sur mon système. Merci pour les conseils!
ether_joe
1
@thejoshwolfe J'ai ajouté ma version du script qui résout le problème de maximiser pour moi.
jbrock
1
@ether_joe J'ai ajouté ma version du script qui pourrait vous être utile étant donné que vous disposez de trois moniteurs.
jbrock
Je suis en xfce, et cette chose est mauvaise. Cela ne fera que déplacer la fenêtre du moniteur gauche vers la droite, et cela mettra mon bureau dans un état vraiment bizarre une fois.
Sava B.
10

J'ai apporté quelques modifications au script mentionné ci-dessus, créé à l'origine par jc00ke.
- Le mien est configuré pour trois moniteurs.
- Il maintient si la fenêtre a été agrandie ou non.
- Il est utilisé pour déplacer la fenêtre vers la gauche ou la droite avec l'utilisation script-name -let script-name -rrespectivement.
- J'ai ajouté un correctif où les applications Chromium lorsqu'elles étaient réduites sont très petites et ne seraient pas agrandies à nouveau sur le nouveau moniteur.
J'ai correspondu avec jc00ke. Bien que cela fonctionne très bien sur Xfce, il a dit qu'il avait des problèmes avec son script dans Unity. Bien sûr, d'autres environnements de bureau tels que Unity n'auraient pas besoin de ce script car ces options sont intégrées au gestionnaire de fenêtres.
Pour utiliser le make script exécutable chmod +x script-nameet 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
jbrock
la source
7

J'ai également créé mon propre script python pour déplacer les fenêtres sur les moniteurs.

https://github.com/calandoa/movescreen

Usage:

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

Caractéristiques intéressantes:

  • gérer les 4 directions
  • gérer certains cas spéciaux comme les fenêtres qui se chevauchent sur plusieurs moniteurs
  • restaurer indépendamment en plein écran , maximisé les états horizontalement et verticalement
  • débogage ou ajout de nouvelles fonctionnalités faciles avec python.
calandoa
la source
1

Une autre alternative qui ne repose sur aucune dépendance "binaire" (comme xdotool ou wmctrl): https://github.com/AlexisBRENON/ewmh_m2m

  • Vous pouvez l'installer avec pip(pas besoin de le copier manuellement, de le rendre exécutable, etc.)
  • Il gère plusieurs écrans avec différentes dispositions (horizontale, verticale, mixte)
  • Conserver le rapport fenêtre / écran lors du déplacement entre des écrans de tailles différentes
  • Restaurer des états maximisés (horizontal, vertical)

Gentil.

AlexisBRENON
la source