1 votes

Comment déplacer Windows sur un certain écran lorsqu'on utilise plus de deux moniteurs dans gnome-Shell ?

Il y a une question qui demande comment déplacer une fenêtre en utilisant les raccourcis clavier. .

Pourtant, la réponse fournie d'utiliser

  • Ctrl + Alt + NUMPAD 4 (bord gauche)
  • Ctrl + Alt + NUMPAD 6 (bord droit)

ne fonctionne pas pour une configuration à trois moniteurs, car le saut omet les écrans du milieu et passe à l'écran le plus à gauche ou le plus à droite.

Une autre réponse recommandait le Place l'extension Windows Il est actif mais les raccourcis ne fonctionnent pas du tout.

Comment pouvoir déplacer Windows sur un écran spécifique en utilisant plus de deux moniteurs avec gnome-Shell ?


Mon résultat de xrandr :

Screen 0: minimum 8 x 8, current 5760 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080      60.0*+   59.9     48.0  
   1680x1050      60.0     59.9  
   1600x1024      60.2  
   1400x1050      60.0  
   1600x900       60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1368x768       60.0  
   1360x768       59.8     60.0  
   1152x864       60.0  
   1280x720       60.0  
   1024x768       60.0  
   1024x576       60.0  
   960x540        60.0  
   800x600        60.3     56.2  
   864x486        60.0  
   640x480        59.9  
   720x405        60.0  
   640x360        60.0  
DP1 disconnected (normal left inverted right x axis y axis)
DP1-1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+
   1680x1050      59.9  
   1600x900       60.0  
   1280x1024      75.0     60.0  
   1280x800       59.9  
   1152x864       75.0  
   1280x720       60.0  
   1024x768       75.1     60.0  
   832x624        74.6  
   800x600        75.0     60.3  
   640x480        75.0     60.0  
   720x400        70.1  
DP1-2 connected 1920x1080+3840+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*+
   1680x1050      59.9  
   1600x900       60.0  
   1280x1024      75.0     60.0  
   1280x800       59.9  
   1152x864       75.0  
   1280x720       60.0  
   1024x768       75.1     60.0  
   832x624        74.6  
   800x600        75.0     60.3  
   640x480        75.0     60.0  
   720x400        70.1  
DP1-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

1voto

Jacob Vlijm Points 78990

La bonne nouvelle est que la résolution en ordonnée de tous les écrans est la même et que les écrans sont alignés verticalement. Nous n'avons donc pas besoin de nous occuper des éventuels conflits de position en ordonnée, comme par exemple aquí .

Déplacement de Windows sur plusieurs écrans, en utilisant l'écran comme argument

Ci-dessous un script pour rendre disponible sous trois (pour trois écrans) des touches de raccourci. En appuyant sur ces touches, vous pouvez déplacer la fenêtre vers l'écran 1, 2 ou 3. Le script calcule sur quel écran se trouve la fenêtre, et la distance à laquelle la fenêtre doit être déplacée.

Le script

#!/usr/bin/env python3
import subprocess
import sys

target = int(sys.argv[1])

# --- for Unity, there is a deviation in the y coordinate of the wmctrl -command
# --- for Unity, set: deviation = -28
deviation = 0
# ---

# get the (sorted) x resolution of the screens as a list
screens = [int(s.split("+")[-2]) for s in subprocess.check_output(
    ["xrandr"]).decode("utf-8").split() if (s).count("+") == 2]
screens.sort()
# get the frontmost window and its coordinates
frontmost = [l.split("#")[-1].strip() for l in subprocess.check_output([
    "xprop", "-root"]).decode("utf-8").splitlines() if "_NET_ACTIVE_WINDOW(WINDOW)" in l][0]
active = frontmost[:2]+(10-len(frontmost))*"0"+frontmost[2:]
windata = [l.split() for l in subprocess.check_output(
    ["wmctrl", "-lG"]).decode("utf-8").splitlines() if active in l][0]
# get the current screen the window is on, and (thus) the x-position (of the screen)
currscreen = len([cr for cr in screens if cr <= int(windata[2])]) 
currpos = sum([item for item in screens[:currscreen]])
# calculate the target position/the distance to move the window
target_pos = screens[target-1]
move = target_pos-currpos
command = ["wmctrl", "-ir", active, "-e", "0,"+(",").join(
    [str(int(windata[2])+move), str(int(windata[3])-28), windata[4], windata[5]])]
# move the window to the targeted screen
subprocess.Popen(command)

Mode d'emploi

  1. Le script a besoin de wmctrl :

    sudo apt-get install wmctrl
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom de move_window.py

  3. Tester- exécuter le script en l'exécutant dans une fenêtre de terminal, avec les commandes :

    python3 /path/to/move_window.py 1

    Pour déplacer la fenêtre active vers l'écran 1,

    python3 /path/to/move_window.py 2

    Pour déplacer la fenêtre active vers l'écran 2,

    python3 /path/to/move_window.py 3

    Pour déplacer la fenêtre active vers l'écran 3

    enter image description here

    Puisque le terminal est votre actif il devrait se déplacer sur vos écrans aux commandes.

  4. Ajoutez-le à trois touches de raccourci différentes, par ex. Ctrl + Alt +1, 2 et 3 : choisissez : Paramètres système > "Clavier" > "Raccourcis" > "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la ou les commandes.

Notas

  • La question portait sur Gnome, mais le script devrait fonctionner sur (au moins) Unity également. Il y a cependant une déviation lorsqu'il est utilisé sur Unity, comme expliqué dans la section head du script et aquí .
  • Puisque le script obtient les informations sur l'écran à partir de xrandr Il devrait fonctionner aussi bien avec 2, 3, 4 ou n'importe quel nombre d'écrans.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X