GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cómo recuperar la ventana fuera de pantalla después de desconectar el segundo monitor?

Uso Ubuntu 14.04 en mi computadora portátil en mi escritorio con un segundo monitor. Cuando me desconecto del segundo monitor, sin fallar, mi ventana de Emacs sale de la pantalla.

Puedo presionar Alt-TAB para hacer que Emacs sea la ventana activa y, trabajando a ciegas, detengo Emacs para poder reiniciarlo, lo que hace que vuelva a aparecer en la pantalla. Pero, me parece que debería haber una forma en Ubuntu de volver a poner una ventana fuera de la pantalla en la pantalla. ¿Hay?

Por supuesto, una mejor solución sería evitar que las ventanas se salgan de la pantalla en respuesta a la desconexión del monitor, y aceptaría una solución para eso problema.

ACTUALIZACIÓN:

La salida de xrandr mientras está conectado a un segundo monitor:

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 salida de xrandr después de desconectarse del segundo monitor:

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)

Además, intenté intercambiar las posiciones izquierda-derecha de mi ventana de Terminal y mi ventana de Emacs y luego desconectarme. Esto permite que la ventana de Emacs permanezca en la pantalla después de desconectarse del segundo monitor. Y la ventana de Terminal sobrevive en la posición que eliminó Emacs. Entonces, parece que la aplicación tiene algo que ver con esto.

Respuesta aceptada:

Mover todas las ventanas al área visible

Como se propuso/solicitó en un comentario, el siguiente script moverá todas las ventanas "normales" al área visible en el espacio de trabajo actual.

La solución es una solución alternativa; la información de la pantalla se actualiza correctamente, dada la diferencia en la salida de xrandr , antes y después de la desconexión. La razón por la cual las ventanas no se mueven solas es (actualmente) desconocida, a menos que otra respuesta resuelva el problema.

El guión

#!/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]])])

Cómo usar

  1. El script necesita wmctrl :

    sudo apt-get install wmctrl
    
  2. Copie el script en un archivo vacío, guárdelo como move_windows.py

  3. Pruébelo:abra varias ventanas, colóquelas en diferentes espacios de trabajo, etc., o intente desconectar el segundo monitor. Luego ejecute el comando:

    python3 /path/to/move_windows.py
    

    Todas las ventanas "normales" deberían moverse al área visible del espacio de trabajo actual.

  4. Si todo funciona bien, agréguelo a una tecla de acceso directo:seleccione:Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:

    python3 /path/to/move_windows.py
    

Ahora debería poder mover todas las ventanas al área visible en el espacio de trabajo actual, con su tecla de método abreviado.

Relacionado:¿Kvm Network Bridge para asignar IP estática en Ubuntu?
Ubuntu
  1. ¿Cómo recuperar datos Xfs después de Rm?

  2. ¿Cómo recuperarse después de que Kate se estrella?

  3. ¿Cómo enumerar los monitores conectados con Xrandr?

  4. Dos pantallas X, ¿cómo obtener un administrador de ventanas en la segunda pantalla?

  5. ¿Cómo arreglar Hibernate?

Cómo recuperar datos eliminados en un sistema Linux

Cómo instalar i3 en Ubuntu

¿Cómo deshabilitar Alt+clic para arrastrar la ventana?

¿Cómo monitorear la actividad del disco?

¿Segundo monitor y espacios de trabajo?

¿Cómo cambiar la opacidad del menú?