Blog

Encendiendo y apagando pantallas con D-Bus

Encendiendo y apagando pantallas con D-Bus

Tengo un monitor CRT para ver vídeo con buen contraste. Para todo lo demás utilizo monitores LCD, así que no los necesito todos a la vez. Quería alternar el encendido/apagado entre unos y otros por comando.

Sony Multiscan E220. Al capturar con el móvil aparece banding (esquina inferior derecha) que no es visible en persona.

X11 proporciona xrandr, pero me encontré con gnome-randr, un script Python con la misma sintaxis pero que emplea D-Bus y por lo tanto funciona también en Wayland.

Guardé gnome-randr.py como /opt/bin/gnome-randr, marcándolo como ejecutable y añadiendo /opt/bin al PATH.

Podemos listar los monitores ejecutando sin parámetros:

[j@localhost ~]$ gnome-randr 
global scale is set; ignoring per monitor scales
max-screen-size: 16384x16384
layout-mode: logical
global-scale-required: yes
supports-mirroring: yes
supports-changing-layout-mode: no

logical monitor 0:
x: 0 y: 0, scale: 1.0, rotation: normal, primary: yes
associated physical monitors:
	DP-1 EV2455

logical monitor 1:
x: 1920 y: 0, scale: 1.0, rotation: normal, primary: no
associated physical monitors:
	DP-2 EV2455

logical monitor 2:
x: 3840 y: 0, scale: 1.0, rotation: normal, primary: no
associated physical monitors:
	HDMI-1 EV2455

DP-1 ENC EV2455 0x03b6f96f
    1920x1200   59.95*+                                                            [x1.0+, x2.0]
    1920x1080   59.96      60.00      59.94      59.93                             [x1.0+, x2.0]
[...]

DP-2 ENC EV2455 0x0418f769
    1920x1200   59.95*+                                                            [x1.0+, x2.0]
    1920x1080   59.96      60.00      59.94      59.93                             [x1.0+, x2.0]
[...]
HDMI-1 ENC EV2455 0x01c245e6
    1920x1200   59.95*+                                                                       [x1.0+, x2.0]
    1920x1080   59.96      60.00      50.00      59.94      59.93                             [x1.0+, x2.0]
[...]

HDMI-2 SNY CPD-E220E 4634585
     1024x768   85.00+    150.09     120.07      75.03      70.07      60.00                                                              [x1.0+, x2.0]
    1920x1200   59.88      59.95                                                                                                          [x1.0+, x2.0]
[...]

Seleccionamos el monitor con --output seguido de la interfaz (DP-<numero>, HDMI-<numero>…), seguido de las opciones (--off para apagar, --auto para encender con resolución y frecuencia por defecto). Por ejemplo, en mi caso, para dejar sólo el CRT encendido:

gnome-randr --output HDMI-2 --auto --output DP-1 --off --output DP-2 --off --output HDMI-1 --off

Para mayor comodidad, podemos crear alias en .bashrc. He llamado al comando anterior solocrt, y he añadido algunos más:

# User specific aliases and functions
alias solocrt='gnome-randr --output HDMI-2 --auto --output DP-1 --off --output DP-2 --off --output HDMI-1 --off'
alias apagarcrt='gnome-randr --output HDMI-2 --off'
alias apagarlcd='gnome-randr --output DP-1 --off --output DP-2 --off --output HDMI-1 --off'
alias encendercrt='gnome-randr --output HDMI-2 --auto'
alias encenderlcd='gnome-randr --output DP-1 --auto --output DP-2 --auto --output HDMI-1 --auto'

Cargamos los cambios:

[j@localhost ~]$ source ~/.bashrc

Podemos ver otras opciones aparte de las ya mencionadas --off y --auto:

gnome-randr --help

Los cambios de gnome-randr son temporales. Por ejemplo, tras suspender, se recuperarán las configuraciones de /var/lib/gdm/.config/monitors.xml (antes de logueo) y ~/.config/monitors.xml (después de logueo). Durante la secuencia de encendido y apagado del ordenador se encienden todos, y no he visto forma de controlarlo.