Finalmente reuní una configuración completa de script que detectará el estado de mi base y cambiará los monitores automáticamente.
Lo primero que hice fue deshacerme de mi Xorg.conf ya que causó más problemas que resolvió. Como estoy usando una tarjeta nvdia, eventualmente descubrí que usar disper era la mejor manera de hacerlo. Lo había descontado antes, ya que sus comandos estándar no podían lograr mi configuración de doble vista, pero luego descubrí que podía crear un metamodo personalizado para usar con Disper.
Para crear el metamodo personalizado, utilicé los valores almacenados en Xorg.conf junto con pruebas anteriores con nv-control-dpy y xrandr como guía. Este metamodo y otros valores de vista gemela se agregaron a un archivo que se puede pasar a Disper mediante stdin .
A continuación se muestra un desglose completo de los scripts y archivos con sus contenidos.
Crear script XCreateMouseVoid:
Nombre del guión: ~/.mousevoid
#!/bin/bash
echo "Mouse Void"
/opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
/opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
Crear archivo de configuración de Disper:
Nombre del archivo: ~/.disperDocked
backend: nvidia
associated displays: CRT-0, DFP-0, DFP-1
metamode: CRT-0: 1280x1024_60 @1280x1024 +0+88, DFP-1: 1920x1200 @1920x1200 +1280+0
scaling: default, default, stretched
xinerama info order: DFP-1, CRT-0, DFP-0
Cree el script de sesión dbus de exportación:
Nombre del guión: ~/.export_x_info
#!/bin/bash
# Export the dbus session address on startup so it can be used by any other environment
sleep 5
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus
Establecer solo para el usuario ejecutable: chmod 700 ~/.export_x_info
Luego póngalo en Aplicaciones de inicio:
Name: X Environment Variables
Command: /home/your_user/.export_x_info
A menos que reinicie, debe ejecutar ~ / .export_x_info para crear el archivo .Xdbus
Cree la regla de udev que se ejecutará en un evento de acoplamiento:
Nombre del guión: /etc/udev/rules.d/81-dell-dock.rules
KERNEL=="dock.0", ACTION=="change", RUN+="/usr/local/sbin/dell-dock"
chmod +x /etc/udev/rules.d/81-dell-dock.rules
Cree el script que está asociado con la regla udev:
Nombre del guión: /usr/local/sbin/dell-dock
#!/bin/sh
# wait for the dock state to change
sleep 0.5
DOCKED=$(cat /sys/devices/platform/dock.0/docked)
case "$DOCKED" in
"0")
echo "Run UnDocking Script..."
/usr/local/sbin/undock
;;
"1")
echo "Run Docking Script..."
/usr/local/sbin/dock
;;
esac
exit 0
chmod +x /usr/local/sbin/dell-dock
Cree el script de desacoplamiento (cambie your_user para que coincida con su nombre de usuario):
Nombre del guión: /usr/local/sbin/undock
#!/bin/bash
USER=your_user
export HOME=/home/$USER
source $HOME/.Xdbus
export DISPLAY=:0
echo "UnDocking Script"
echo "Switch primary monitor"
sudo -u $USER disper -s
echo "Killall XCreateMouseVoid"
pkill XCreate
echo "Restart conky"
pkill conky
sudo -u $USER conky &
chmod +x /usr/local/sbin/undock
Cree el script de acoplamiento (cambie su_usuario para que coincida con su nombre de usuario):
Nombre del guión: /usr/local/sbin/dock
#!/bin/bash
USER=your_user
export HOME=/home/$USER
source $HOME/.Xdbus
export DISPLAY=:0
echo "Docking Script"
echo "Switch to Dualview"
sudo -u $USER disper -i < $HOME/.disperDocked
echo "Start XCreateMouseVoid"
pkill XCreate
sudo -u $USER $HOME/.mousevoid
echo "Restart conky"
pkill conky
sudo -u $USER conky &
chmod +x /usr/local/sbin/dock
Para depurar los scripts del dock, debe habilitar el registro de depuración de udev: