GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment récupérer la fenêtre hors écran après avoir déconnecté le deuxième moniteur ?

J'utilise Ubuntu 14.04 sur mon ordinateur portable à mon bureau avec un deuxième moniteur. Lorsque je me déconnecte du deuxième moniteur, sans faute, ma fenêtre pour Emacs sort de l'écran.

Je peux Alt-TAB pour faire d'Emacs la fenêtre active et, en travaillant à l'aveugle, arrêter Emacs pour que je puisse le redémarrer, ce qui le fait réapparaître à l'écran. Mais, il me semble qu'il devrait y avoir un moyen dans Ubuntu de remettre une fenêtre hors écran sur l'écran. Y a-t-il ?

Bien sûr, une meilleure solution serait d'empêcher les fenêtres de s'éteindre en réponse à la déconnexion du moniteur, et j'accepterais une solution à cela problème.

MISE À JOUR :

La sortie de xrandr tout en étant connecté à un deuxième moniteur :

Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1280+0 (normal left inverted right x axis y axis) 382mm x 215mm
   1920x1080      60.0*+   59.9  
   1680x1050      60.0     59.9  
   1600x1024      60.2  
   1400x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1360x768       59.8     60.0  
   1152x864       60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
   1280x1024      60.0*+   75.0  
   1280x960       60.0  
   1152x864       75.0  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        75.0     72.8     66.7     60.0  
   720x400        70.1  
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

La sortie de xrandr après déconnexion du second moniteur :

Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
   1920x1080      60.0*+   59.9  
   1680x1050      60.0     59.9  
   1600x1024      60.2  
   1400x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1360x768       59.8     60.0  
   1152x864       60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

De plus, j'ai essayé d'échanger les positions gauche-droite de ma fenêtre Terminal et de ma fenêtre Emacs, puis de me déconnecter. Cela permet à la fenêtre Emacs de rester à l'écran après la déconnexion du second moniteur. Et la fenêtre Terminal survit dans la position qui a éliminé Emacs. Il semble donc que l'application ait quelque chose à voir avec cela.

Réponse acceptée :

Déplacez toutes les fenêtres dans la zone visible

Comme proposé/demandé dans un commentaire, le script ci-dessous déplacera toutes les fenêtres "normales" vers la zone visible de l'espace de travail actuel.

La solution est une solution de contournement; les informations d'écran sont mises à jour correctement, étant donné la différence dans la sortie de xrandr , avant et après la déconnexion. La raison pour laquelle les fenêtres ne bougent pas d'elles-mêmes est (actuellement) inconnue, à moins qu'une autre réponse ne résolve le problème.

Le scénario

#!/usr/bin/env python3
import subprocess

# get the resolution of the screen (+0+0)
res = [
    int(n) for n in [
        s.split("+")[0].split("x")\
        for s in subprocess.check_output(["xrandr"]).decode("utf-8").split()\
        if "+0+0" in s][0]
    ]
# create list of windows
w_list = [w.split() for w in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
# filter only "normal" ones
valid = [
    w for w in w_list if "_NET_WM_WINDOW_TYPE_NORMAL" in\
    subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8")
    ]
# get the number of valid windows and calculate a targeted position
# the targeted position is a hunch, it will be exact if the window fits completely inside the resolution
# it will work anyway
parts = len(valid)+2
positions = [(int(n*res[0]/parts), int(n*res[1]/parts)) for n in list(range(parts))[1:-1]]
# unmaximaize, move the windows to the visible area (current workspace)
for i, w in enumerate(valid):
    subprocess.Popen(["wmctrl", "-ir", w[0], "-b", "remove,maximized_vert,remove,maximized_horz"])
    # weird, but sometimes wmctrl refuses to move a window if it is not resized first (?)
    subprocess.Popen(["wmctrl", "-ir", w[0], "-e", "0,200,200,200,200"])      
    subprocess.Popen(["wmctrl", "-ir", w[0], "-e", (",").join(["0", str(positions[i][0]), str(positions[i][1]),w[4],w[5]])])

Comment utiliser

  1. Le script a besoin de wmctrl :

    sudo apt-get install wmctrl
    
  2. Copiez le script dans un fichier vide, sécurisez-le sous move_windows.py

  3. Testez-le :ouvrez plusieurs fenêtres, placez-les sur différents espaces de travail, etc., ou essayez de déconnecter le deuxième moniteur. Exécutez ensuite la commande :

    python3 /path/to/move_windows.py
    

    Toutes les fenêtres "normales" doivent se déplacer vers la zone visible de l'espace de travail actuel.

  4. Si tout fonctionne bien, ajoutez-le à une touche de raccourci :choisissez :Paramètres système> « Clavier »> « Raccourcis »> « Raccourcis personnalisés ». Cliquez sur le "+" et ajoutez la commande :

    python3 /path/to/move_windows.py
    

Vous devriez maintenant pouvoir déplacer toutes les fenêtres dans la zone visible de l'espace de travail actuel, avec votre touche de raccourci.

Connexes :Pont réseau Kvm pour attribuer une adresse IP statique dans Ubuntu ?
Ubuntu
  1. Comment récupérer des données Xfs après Rm ?

  2. Comment récupérer après le crash de Kate ?

  3. Comment récupérer/supprimer une session Ssh après avoir perdu la connexion ?

  4. Comment rouvrir la fenêtre Truecrypt après sa fermeture ?

  5. Comment surveiller la température du GPU nvidia sur Kubuntu 16.10

Comment récupérer des données supprimées sur un système Linux

Comment installer i3 sur Ubuntu

Comment désactiver le glissement de fenêtre Alt + clic ?

Comment surveiller l'activité du disque ?

Deuxième moniteur et espaces de travail ?

Comment changer l'opacité du menu ?