Jak automatycznie przełączać monitory za pomocą stacji dokującej do laptopa
11
Mam Dell Precision M4300 z Dell Dock PRO1X z systemem Ubuntu Natty.
Kiedy mam zadokowany laptop, wyświetlacz lcd jest wyłączony i korzystam z dwóch zewnętrznych monitorów, jednak po oddokowaniu laptopa nie przełącza się na ekran laptopa. To samo dzieje się, gdy dokuję laptopa, nie przełącza się on na zewnętrzne monitory.
Po ponownym uruchomieniu laptopa wybierze prawidłową konfigurację, ale nie zmieni automatycznie monitorów z uruchomionym Ubuntu.
W końcu przygotowałem kompletną konfigurację skryptu, która wykryje mój status stacji dokującej i automatycznie przełączy monitory.
Pierwszą rzeczą, którą zrobiłem, było pozbycie się mojego Xorg.conf, ponieważ spowodował więcej problemów, które rozwiązał. Ponieważ używam karty NVDIA I w końcu okazało się, że za pomocą disper była najlepsza droga. Zdyskontowałem go wcześniej, ponieważ jego standardowe polecenia nie mogły osiągnąć konfiguracji dualview, ale potem odkryłem, że mogę stworzyć niestandardowy metamode do użycia z disper.
Aby utworzyć niestandardowy metamode, wykorzystałem wartości zapisane w Xorg.conf wraz z poprzednimi testami z nv-control-dpy i xrandr jako wskazówką. Ten metamode i inne wartości twinview zostały dodane do pliku, który można przekazać w celu rozproszenia standardowego wejścia .
Ze względu na posiadanie monitorów o różnej wielkości z Twinview, muszę użyć XCreateMouseVoid , jak opisano w tym pytaniu .
Poniżej znajduje się pełna lista skryptów i plików z ich zawartością.
#!/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
Ustawiony tylko na plik wykonywalny użytkownika: chmod 700 ~/.export_x_info
Następnie umieść go w aplikacjach startowych:
Name: X Environment Variables
Command: /home/your_user/.export_x_info
O ile nie uruchomisz ponownie, musisz uruchomić ~ / .export_x_info, aby utworzyć plik .Xdbus
Utwórz regułę udev, która będzie działać po zdarzeniu dokowania:
Nazwa skryptu: /etc/udev/rules.d/81-dell-dock.rules
#!/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
Utwórz skrypt oddokowania (zmień swojego_użytkownika, aby pasował do swojej nazwy użytkownika):
Tak, wygląda na to, że ten plik nie istnieje: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
$ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Możesz użyć autorandr .
Zobacz też:
źródło