Automatically switch Xfce panel layout when pluggin in a monitor This is my documentation of this [blog post](http://colinrrobinson.com/technology/linux/xfce/automatically-switch-xfce-panel-layout-plugging-monitor/#comment-144938) by Colin Robins. I'm quite thankful for his explanation, and really happy that it now works for me. His post is ~5 years old and I found a few things that don't work exactly the same anymore. I tested everything on Xubuntu 20.04. #### Panel configurations The handy tool [Xfce Panel profiles](https://docs.xfce.org/apps/xfce4-panel-profiles/start) allows you to backup and export your different desired panel configurations. I named mine `laptop.tar.bz2` and `external-monitor.tar.bz2`. You can load a different panel profile from the command line with xfce4-panel-profiles load .tar.bz2 #### `udev` rule `udev` is responsible for starting our service after connecting or disconnecting the external monitor. To use it we have write a `udev` rule, i.e. put the following into the file `/etc/udev/rules.d/95-monitor-hotplug.rules` ACTION=="change", KERNEL=="card0", RUN+="/usr/bin/systemctl start hot_plug.service" So I'm no expert on `udev` but AFAIK this tells `udev` to start the service `hot_plug.service` whenever there is a "change" concerning the video card output. #### `systemd` service So now we still have to write the `systemd` service `hot_plug.service`. [Here](https://linuxconfig.org/how-to-write-a-simple-systemd-service) are some basics about `systemd` services. To create our service write the following into the file `/etc/systemd/system/hot_plug.service` [Unit] Description=Monitor hotplug [Service] Type=simple RemainAfterExit=no User=jonas ExecStart=/usr/bin/bash /usr/local/bin/hotplug_monitor.sh [Install] WantedBy=multi-user.target *Replace jonas by your username*. So this service calls a script `/usr/local/bin/hotplug_monitor.sh`, which will do the actual work. For me this script is #!/bin/bash X_USER=jonas export DISPLAY=:0 export XAUTHORITY=/home/$X_USER/.Xauthority export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus function connect() { xfce4-panel-profiles load /home/jonas/.config/xfce4-panel-profiles/external-monitor.tar.bz2 } function disconnect() { xfce4-panel-profiles load /home/jonas/.config/xfce4-panel-profiles/laptop.tar.bz2 } if [ $(cat /sys/class/drm/card0-HDMI-A-1/status) == "connected" ] ; then connect elif [ $(cat /sys/class/drm/card0-HDMI-A-1/status) == "disconnected" ] ; then disconnect else exit fi Things you might want to adapt: 1. You should change `X_USER` to your username 2. I store the panel profiles in `/home/jonas/.config/xfce4-panel-profiles/` 3. Check if your external monitor is `card0-HDMI-A-1`. If you use VGA this might be something different. #### Further adaptions If you want you can add other things that should be done when connecting the external monitor. I mostly use this with my Wacom tablet, so I also want to set the drawing area only on the tablet. So I added the line # map the tablet input to the tablet's display xsetwacom --set "Wacom One Pen Display 13 Pen stylus" MapToOutput HDMI-A-0 To change the button on the pen to right click instead of middle click I use # map the button on the pen to right click xsetwacom --set "Wacom One Pen Display 13 Pen stylus" Button 2 "button +3" tags: computers, udev, systemd, xfce