Activar/desactivar una salida de vídeo en KDE Plasma 6 Wayland
Enviado por miguelcarmona :: 12 de enero de 2025
Tengo una TV 4k de 55″ conectada al pc pero no siempre la voy a utilizar como monitor adicional ya que habrá veces que esté apagada y otras reproduciendo por su cuenta de forma independiente (tiene android TV).
La cuestión es que para activarla y desactivar la salida rápidamente en KDE Plasma 6 con wayland, podemos hacer uso de kscreen-doctor
Para empezar, configura las pantallas todas encendidas. Una vez lo tengas, en una consola vamos a ejecutar «kscreen-doctor -o» para que nos muestre la configuración:
miguel@principal:~$ kscreen-doctor -o
Output: 1 DP-1
enabled
connected
priority 1
DisplayPort
Modes: 1:1280x800@60! 2:2560x1600@60* 3:1280x720@60
4:1024x768@60 5:800x600@60 6:640x480@60
7:1024x768@60 8:1280x720@60
Geometry: 1300,2160 2560x1600
Scale: 1
Rotation: 1
Overscan: 0
Vrr: incapable
RgbRange: unknown
HDR: incapable
Wide Color Gamut: incapable
ICC profile: none
Color profile source: EDID
Brightness control: supported, set to 100%
Output: 2 HDMI-A-1
enabled
connected
priority 3
HDMI
Modes: 9:1920x1080@60! 10:4096x2160@60 11:4096x2160@60
12:4096x2160@50 13:4096x2160@24 14:4096x2160@24
15:3840x2160@60* 16:3840x2160@60 17:3840x2160@50
18:3840x2160@30 19:3840x2160@30 20:3840x2160@25
Geometry: 0,0 3840x2160
Scale: 1
Rotation: 1
Overscan: 0
Vrr: incapable
RgbRange: unknown
HDR: disabled
Wide Color Gamut: disabled
ICC profile: none
Color profile source: sRGB
Brightness control: supported, set to 84%
Output: 3 DP-3
enabled
connected
priority 2
DisplayPort
Modes: 69:1680x1050@60*! 70:1280x1024@60 71:1440x900@60
72:1280x800@60 73:1280x720@60 74:1024x768@60
Geometry: 3860,2120 1050x1680
Scale: 1
Rotation: 2
Overscan: 0
Vrr: incapable
RgbRange: unknown
HDR: incapable
Wide Color Gamut: incapable
ICC profile: none
Color profile source: EDID
Brightness control: supported, set to 100%
Aquí se muestran 3 monitores que tengo conectados (incluyendo la TV).
Para desactivar la TV, bastaría con hacer un «output.SALIDA.disable» de la salida. En mi caso:
kscreen-doctor output.HDMI-A-1.disable
Para volver a activarla no valdría con un simple «output.SALIDA.enable» ya que al desactivarla, plasma automáticamente reorganiza las posiciones partiendo de la 0,0 (ejes x,y) de la pantalla que corresponda y precisamente la 0,0 es la TV así que habría que especificar todas las posiciones tal y como se muestra en la salida:
kscreen-doctor output.HDMI-A-1.enable \
output.HDMI-A-1.mode.3840x2160@60 \
output.HDMI-A-1.position.0,0 \
output.DP-1.position.1300,2160 \
output.DP-3.position.3860,2120
Con esto, activamos la pantalla, establecemos su resolución (si te fijas es la que tiene un asterisco en la salida anterior 15:3840×2160@60*) y establecemos las posiciones de todas las pantallas tal y como se detallan en «Geometry» de cada una.
Podemos añadir cambios en resoluciones o demás parámetros para personalizarlo al gusto. Hay algunos ejemplos en la ayuda:
miguel@principal:~$ kscreen-doctor --help-all
Usage: kscreen-doctor [options] [output.<name>.<setting> output.<name>.setting [...]]
kscreen-doctor allows to change the screen setup from the command-line.
Setting the output configuration is done in an atomic fashion, all settings
are applied in a single command.
kscreen-doctor can be used to enable and disable outputs, to position screens,
change resolution (mode setting), etc.. You should put all your options into
a single invocation of kscreen-doctor, so they can all be applied at once.
Usage examples:
Show output information:
$ kscreen-doctor -o
Output: 1 eDP-1 enabled connected Panel Modes: Modes: 1:800x600@60 [...] Geometry: 0,0 1280x800
Output: 70 HDMI-2 enabled connected HDMI Modes: 1:800x600@60 [...] Geometry: 1280,0 1920x1080
Disable the hdmi output, enable the laptop panel and set it to a specific mode
$ kscreen-doctor output.HDMI-2.disable output.eDP-1.mode.1 output.eDP-1.enable
Position the hdmi monitor on the right of the laptop panel
$ kscreen-doctor output.HDMI-2.position.1280,0 output.eDP-1.position.0,0
Set resolution mode
$ kscreen-doctor output.HDMI-2.mode.1920x1080@60
Set scale (note: fractional scaling is only supported on wayland)
$ kscreen-doctor output.HDMI-2.scale.2
Set rotation (possible values: none, left, right, inverted)
$ kscreen-doctor output.HDMI-2.rotation.left
Set HDR mode (possible values: enable, disable)
$ kscreen-doctor output.HDMI-2.hdr.enable
Set SDR brightness (possible values: 100-1000)
$ kscreen-doctor output.HDMI-2.sdr-brightness.300
Set wide color gamut mode (possible values: enable, disable)
$ kscreen-doctor output.HDMI-2.wcg.enable
Set ICC profile path
$ kscreen-doctor output.HDMI-2.iccprofile."/path/to/profile.icc"
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt
options.
-i, --info Show runtime information: backends,
logging, etc.
-j, --json Show configuration in JSON format
-o, --outputs Show outputs
-d, --dpms <off> Display power management (wayland only)
-l, --log <comment> Write a comment to the log file
--dpms-excluded <connector> Do not apply the dpms change to the
output with said model names
--qmljsdebugger <value> Activates the QML/JS debugger with a
specified port. The value must be of
format port:1234[,block]. "block" makes
the application wait for a connection.
--platform <platformName[:options]> QPA plugin. See QGuiApplication
documentation for available options for
each plugin.
--platformpluginpath <path> Path to the platform plugins.
--platformtheme <theme> Platform theme.
--plugin <plugin> Additional plugins to load, can be
specified multiple times.
--qwindowgeometry <geometry> Window geometry for the main window,
using the X11-syntax, like 100x100+50+50.
--qwindowicon <icon> Default window icon.
--qwindowtitle <title> Title of the first window.
--reverse Sets the application's layout direction
to Qt::RightToLeft (debugging helper).
--session <session> Restores the application from an earlier
session.
Arguments:
config Specific output settings are separated
by spaces, each setting is in the form of
output.<name>.<setting>[.<value>]
For example:
$ kscreen-doctor output.HDMI-2.enable \
output.eDP-1.mode.4 \
output.eDP-1.position.1280,0
Multiple settings are passed in order to have kscreen-doctor apply these settings
in one go.
Para facilitarme las cosas, me he creado un script que lanzo con un simple click con el plasmoid lanzamiento rápido.
El script ~/bin/scripts/toggle-tv-screen.sh:
#!/bin/bash
output=$(kscreen-doctor -o | grep -A 2 "HDMI-A-1")
if echo "$output" | grep -q "enabled" && echo "$output" | grep -q "connected"; then
kscreen-doctor output.HDMI-A-1.disable
kdialog --title 'TV Sony desactivada' --icon 'tv' --passivepopup "TV desactivada" 2
else
kscreen-doctor output.HDMI-A-1.enable output.HDMI-A-1.mode.3840x2160@60 output.HDMI-A-1.position.0,0 output.DP-1.position.1300,2160 output.DP-3.position.3860,2120
kdialog --title 'TV Sony activa' --icon 'tv' --passivepopup "Activando TV" 2
fi
Básicamente lo que hace es comprobar si la salida HDMI-A-1 está «enabled» y «conected» y en cada caso la desactiva o la vuelve a activar y nos manda una notificación pasiva (no persistente) de 2 segundos.
No olvides dar permisos de ejecución en consola (chmod +x ~/bin/scripts/toggle-tv-screen.sh) o botón derecho, propiedades, permisos y activar «Permitir la ejecución del archivo como programa».
Luego he creado un archivo ~/bin/scripts/toggle-tv-screen..desktop
[Desktop Entry]
Comment[es_ES]=Activa o desactiva la pantalla TV
Comment=Activa o desactiva la pantalla TV
Exec=/home/miguel/bin/scripts/toggle-tv-screen.sh
GenericName[es_ES]=Activa pantalla TV
GenericName=Activa pantalla TV
Icon=tv
MimeType=
Name[es_ES]=activa-tv-screen
Name=enable-tv-screen
StartupNotify=true
Terminal=false
Ya sólo queda añadir un plasmoid «Lanzamiento rápido» y arrastrar sobre el el archivo toggle-tv-screen.desktop
Se nos muestra con el icono seleccionado (TV en mi caso) y con un simple click, activamos o desactivamos la salida a TV.