J'ai finalement mis en place une configuration de script complète qui détectera mon statut de station d'accueil et commutera les moniteurs automatiquement.
La première chose que j'ai faite a été de me débarrasser de mon Xorg.conf car cela a causé plus de problèmes qu'il a résolu. Depuis que j'utilise une carte nvdia, j'ai finalement découvert que l'utilisation de disper était la meilleure solution. Je l'avais déjà actualisé car ses commandes standard ne pouvaient pas réaliser ma configuration dualview, mais j'ai découvert que je pouvais créer un métamode personnalisé à utiliser avec disper.
Pour créer le métamode personnalisé, j'ai utilisé les valeurs stockées dans Xorg.conf avec les tests précédents avec nv-control-dpy et xrandr comme guide. Ce métamode et d'autres valeurs twinview ont été ajoutés à un fichier qui peut être transmis pour disparaître via stdin .
Vous trouverez ci-dessous une ventilation complète des scripts et des fichiers avec leur contenu.
Créer un script XCreateMouseVoid:
Nom du script: ~/.mousevoid
#!/bin/bash
echo "Mouse Void"
/opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
/opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
Créer un fichier de paramètres Disper:
Nom de fichier: ~/.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
Créez le script de session d'exportation dbus:
Nom du script: ~/.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
Défini sur l'exécutable utilisateur uniquement: chmod 700 ~/.export_x_info
Ensuite, mettez-le dans les applications de démarrage:
Name: X Environment Variables
Command: /home/your_user/.export_x_info
À moins que vous ne redémarriez, vous devez exécuter ~ / .export_x_info pour créer le fichier .Xdbus
Créez la règle udev qui s'exécutera avec lors d'un événement de dock:
Nom du script: /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
Créez le script associé à la règle udev:
Nom du script: /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
Créez le script de désancrage (changez votre_utilisateur pour qu'il corresponde à votre nom d'utilisateur):
Nom du script: /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
Créez le script de dock (changez votre_utilisateur pour qu'il corresponde à votre nom d'utilisateur):
Nom du script: /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
Pour déboguer les scripts de dock, vous devez activer la journalisation du débogage udev: