Saltar al contenido
binarios.com.ar/blog/apagar-el-monitor-de-forma-remota/

archivo / Acceso remoto

Apagar el monitor de forma remota

29 de septiembre de 2011 147 palabras 1 imagen 6 min de lectura 558 visitas

Si usamos nuestra computadora con Linux para ver películas al acostarnos, o para escuchar música mientras hacemos otra cosa, resulta de gran utilidad poder apagar la pantalla cuando ya no la necesitamos, sin tener que levantarnos.

En este artículo veremos cómo hacerlo hoy, que no es como lo hacía yo hace unos años. También veremos algo que casi nunca se explica: cómo apagar una sola pantalla si tenemos dos o más.

Primero: por qué dejó de andar el comando de siempre

Durante años la receta fue una sola línea:

xset dpms force off

Si la probamos hoy en un equipo moderno, lo más probable es que no pase absolutamente nada. Y el motivo no es que el comando esté mal escrito.

Podemos comprobarlo nosotros mismos:

xset q | grep -A2 DPMS

Si la respuesta es esta, ya tenemos el diagnóstico:

DPMS (Display Power Management Signaling):
  Server does not have the DPMS Extension

DPMS es el mecanismo que le avisa al monitor que se apague, y xset lo maneja a través del servidor gráfico X11. El asunto es que Linux viene mudándose a Wayland, que es otro sistema: Fedora lo usa por defecto desde 2016, Ubuntu desde 2021 y Debian desde la versión 12. Las aplicaciones viejas de X siguen andando gracias a una capa de compatibilidad llamada XWayland, pero esa capa no implementa DPMS. Por eso xset no falla con un error: simplemente no tiene a quién pedirle nada.

Para saber en cuál de los dos estamos:

echo $XDG_SESSION_TYPE

Si responde wayland, el resto de este artículo es para nosotros. Si responde x11, el comando de toda la vida sigue sirviendo.

Apagar la pantalla en GNOME

GNOME —el escritorio de Ubuntu, Fedora y Debian por defecto— no tiene un comando propio para esto, pero sí expone el control por D-Bus, que es el sistema con el que los programas del escritorio se hablan entre sí.

Para apagar:

gdbus call --session --dest org.gnome.Mutter.DisplayConfig \
  --object-path /org/gnome/Mutter/DisplayConfig \
  --method org.freedesktop.DBus.Properties.Set \
  org.gnome.Mutter.DisplayConfig PowerSaveMode "<3>"

Y para volver a encender, el mismo comando cambiando el 3 por un 0:

gdbus call --session --dest org.gnome.Mutter.DisplayConfig \
  --object-path /org/gnome/Mutter/DisplayConfig \
  --method org.freedesktop.DBus.Properties.Set \
  org.gnome.Mutter.DisplayConfig PowerSaveMode "<0>"

Los valores vienen del estándar DPMS: 0 es encendida y 3 es apagada.

Si en vez de apagar la pantalla queremos bloquear la sesión, hay otra interfaz más directa:

gdbus call --session --dest org.gnome.ScreenSaver \
  --object-path /org/gnome/ScreenSaver \
  --method org.gnome.ScreenSaver.Lock

Y si tenemos dos pantallas, ¿qué pasa?

Acá está lo interesante, y es la pregunta que en 2011 nunca me hice.

Con xset dpms force off se apagaban todas. No era una limitación del comando: en X11, DPMS es una propiedad de la pantalla completa, no de cada salida de video. Nunca hubo forma de elegir un monitor. En 2011 no se notaba porque tener dos pantallas era poco común; hoy es lo normal.

Y con GNOME sobre Wayland pasa lo mismo: PowerSaveMode también es global.

La buena noticia es que otros escritorios sí lo resuelven. Primero necesitamos saber cómo se llaman nuestras salidas:

ls /sys/class/drm/ | grep -E '^card[0-9]+-'

Vamos a ver nombres como DP-1, HDMI-A-2 o eDP-1. Con eso:

# sway y otros compositores basados en wlroots
swaymsg "output HDMI-A-2 power off"

# wlopm, que sirve para cualquier compositor wlroots
wlopm --off HDMI-A-2

# Hyprland
hyprctl dispatch dpms off HDMI-A-2

# KDE Plasma
kscreen-doctor output.HDMI-A-2.dpms.off

En GNOME, la única forma de dejar una sola pantalla apagada es desactivar esa salida con el método ApplyMonitorsConfig de Mutter, que es bastante más engorroso: hay que leer primero el estado actual con GetCurrentState y volver a enviar la configuración completa sin el monitor que queremos apagar. Es posible, pero no es una línea de comando: da para un script aparte.

Vale la pena decirlo con todas las letras: en esto GNOME es el que peor anda. Si esta función nos importa mucho, los escritorios basados en wlroots la resuelven en una línea.

El detalle que hacía fallar todo por SSH

Volvamos a la idea original: apagar la pantalla desde el celular o desde otra computadora, por SSH.

Acá hay una trampa que en 2011 tampoco mencioné, y que ya existía entonces. Cuando nos conectamos por SSH, nuestra sesión no es la misma que la del escritorio: no tiene las variables de entorno que apuntan al servidor gráfico, y sin ellas cualquiera de estos comandos falla.

En X11 había que exportar dos variables, y la segunda es la que casi todos olvidan:

export DISPLAY=:0
export XAUTHORITY=/home/USUARIO/.Xauthority
xset dpms force off

Sin XAUTHORITY, el servidor X rechaza al cliente porque no tiene la cookie de autorización, y el comando falla aunque DISPLAY esté bien puesto.

En Wayland con D-Bus el problema es equivalente, pero la variable es otra:

export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus

Con esa línea antes del comando, gdbus encuentra la sesión de escritorio y todo funciona. Conviene dejarla en un script chiquito para no escribirla cada vez:

#!/usr/bin/env bash
# apagar-pantalla.sh
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
gdbus call --session --dest org.gnome.Mutter.DisplayConfig \
  --object-path /org/gnome/Mutter/DisplayConfig \
  --method org.freedesktop.DBus.Properties.Set \
  org.gnome.Mutter.DisplayConfig PowerSaveMode "<3>"

Y listo: ssh equipo apagar-pantalla.sh desde el celular, y a dormir.

¿Y en un servidor sin escritorio?

Si la máquina no tiene entorno gráfico y lo que queremos es apagar la consola de texto, no hay ni X ni Wayland de por medio. Alcanza con:

setterm --blank force

Ese comando trabaja directamente sobre la terminal virtual, así que hay que ejecutarlo en la consola en cuestión y no a través de SSH.

Para cerrar

El comando que publiqué en 2011 no envejeció: dejó de tener con quién hablar. La mudanza de X11 a Wayland es probablemente el cambio más profundo que tuvo el escritorio Linux en la última década, y este es un ejemplo chiquito y muy concreto de lo que implica — algo que funcionaba con una línea ahora depende de qué escritorio usamos.

La contra es que perdimos una receta única que servía para todos. La ventaja es que ganamos algo que antes era imposible: apagar una sola pantalla y dejar la otra encendida.

binarios.com.ar · publicado el 29.09.2011
recuperado del archivo de Joomla en 2026
Texto e imágenes de Cristian Bottazzi bajo CC BY-NC-SA 4.0.
Código de barras Code128 que codifica binari-os