Pàgines

dilluns, 20 de juny de 2022

Xfce: Canvi automàtic de configuració del panell en connectar un monitor extern

Ja fa uns quants anys que faig servir escriptori Xfce. Després de passar per Enlightment i Fluxbox (quin parell de joies pel que fa a configuració i per a màquines amb pocs recursos) em vaig quedar a Xfce quan vaig fer el canvi a Manjaro Linux (si patiu de distro-hopping, Manjaro en pot ser una bona cura)

No necessito meravelles d'interfície (cada vegada que he tastat KDE he tornat a la "normalitat" al cap de molt poca estona), sinó un gestor de finestres que faci el que ha de fer i que consumeixi pocs recursos, i per mi Xfce amb el toc Manjaro és ara mateix l'escriptori ideal. Només hi havia un petit detall que darrerament em feia la guitza, i era la configuració del panell al monitor extern. Sí, qualsevol cerca dona resultats sobre com afegir un segon panell a l'escriptori que es pot posar al segon monitor i configurar com es vulgui, cosa que funciona... fins que es desconnecta el monitor extern. Llavors el segon panell li pren el lloc al panell per defecte del portàtil... total: una llauna. Fins que vaig trobar la solució aquí. En aquesta entrada només miro d'actualitzar el paquet que cal instal·lar (és diferent de l'indicat a l'entrada original) i poca cosa més. Som-hi!

El paquet que substitueix a Xfce Panel Switch indicat, com a mínim per a Arch i derivades, es diu xfce4-panel-profiles, i com que és un paquet AUR, es pot instal·lar, per exemple, amb:

$ pamac build xfce4-panel-profiles

El primer pas per tal que funcioni l'invent és deixar el panell amb la configuració desitjada al portàtil, executar 

$  xfce4-panel-profiles

i exportar la configuració i desar-la amb el nom laptop.tar.bz2 (l'eina afegeix automàticament l'extensió .tar.bz2)

Després s'ha de connectar el monitor extern, deixar-hi el panell configurat i repetir l'exportació, aquest cop amb el nom externalmon.tar.bz2 (aquest pas el que fa és exportar la configuració actual amb els 2 panells, el del portàtil i el del monitor extern).

Podem provar que tot funciona executant aquestes ordres:

$  python3 /usr/share/xfce4-panel-profiles/xfce4-panel-profiles/panelconfig.py load /home/ruta-al-fitxer/laptop.tar.bz2

$  python3 /usr/share/xfce4-panel-profiles/xfce4-panel-profiles/panelconfig.py load /home/ruta-al-fitxer/externalmon.tar.bz2

Tal com diu l'autor de la publicació original, la cosa es podria quedar aquí, crear un parell d'accessos directes i executar-los cada vegada, però evidentment la cosa es pot millorar:

Creem una regla udev per a activar un servei systemd: 

$ sudo touch  /etc/udev/rules.d/95-monitor-hotplug.rules

I amb el nostre editor preferit hi posem aquest contingut:

ACTION=="change", KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/usr/bin/systemctl start hot_plug.service"

I ara cal crear un servei que s'activi en endollar o desendollar el monitor extern:

$ sudo touch /etc/systemd/system/hot_plug.service

I en aquest fitxer hi posem:

[Unit]

Description=Monitor hotplug


[Service]

Type=simple

RemainAfterExit=no

User=tomi

ExecStart=/usr/bin/bash /usr/local/bin/hotplug_monitor.sh


[Install]

WantedBy=multi-user.target

Atenció: canvieu "tomi" pel vostre nom d'usuari.

És el moment de crear l'script que el servei executarà: 

$ sudo touch  /usr/local/bin/hotplug_monitor.sh

Amb el contingut:


#!/bin/bash


# Substituïu "tomi" pel vostre nom d'usuari

X_USER=tomi

export DISPLAY=:0

export XAUTHORITY=/home/$X_USER/.Xauthority

export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus


function connect()

{

    # Recordeu modificar el següent path cap on tingueu desades les configuracions:

    python3 /usr/share/xfpanel-switch/xfpanel-switch/panelconfig.py load /home/tomi/externalmon.tar.bz2

}


function disconnect()

{

    # Recordeu modificar el següent path cap on tingueu desades les configuracions:

    python3 /usr/share/xfpanel-switch/xfpanel-switch/panelconfig.py load /home/tomi/laptop.tar.bz2

}


# Replace card0-DP-1 with the card and port you are using

if [ $(cat /sys/class/drm/card0-DP-1/status) == "connected" ] ; then

  connect

elif [ $(cat /sys/class/drm/card0-DP-1/status) == "disconnected" ] ; then

  disconnect

else

  exit

fi 

Finalment cal fer que el fitxer sigui executable:

$ chmod +x /usr/local/bin/hotplug_monitor.sh

Només dos apunts més:

-és possible que calgui canviar card0-DP1 a l'script per la targeta i port que esteu fent servir. Per exemple, en el meu cas és card0-HDMI-2.

-recordeu canviar els paths a la ubicació on teniu desats els fitxers de configuració.

Ja està! A gaudir de panells amb Xfce i monitor extern!