Basculer automatiquement l'affichage sur la station d'accueil Lenovo et Linux

8

J'ai un thinkpad lenovo avec nvidia optimus et une mini station d'accueil série 3 .

Je veux que lorsqu'il est ancré, il devrait automatiquement basculer vers un moniteur externe si possible et si je le déconnecte, il devrait passer automatiquement au thinkpad lcd.

Cela devrait également fonctionner sur la phase de démarrage car là, je dois taper un mot de passe pour le disque crypté (dm-crypt).

J'ai essayé ce qui suit mais cela ne fonctionne pas:

J'ai créé un fichier /etc/acpi/thinkpad-undock.sh(+ chmod a+x thinkpad-undock.sh) qui contient les lignes suivantes:

#!/bin/sh
xrandr --output LVDS-1 --auto --output DP-5.8 --off

Et aussi /etc/acpi/thinkpad-dock.sh

#!/bin/sh
prime-select nvidia # ensures that nvidia card is selected
xrandr --output LVDS-1 --off --output DP-5.8 --auto

Et encore chmod a+x thinkpad-dock.sh.

L'exécution manuelle des deux scripts fonctionne.

J'ai ensuite créé deux fichiers pour gérer les événements:

thinkpad-dock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh

et aussi thinkpad-undock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh

Ensuite, j'ai rechargé le démon acpi avec /etc/init.d/acpid reload. Cependant, si je connecte ou déconnecte l'ordinateur portable, cela ne fait rien.

J'ai obtenu le numéro d'événement ci-dessus en exécutant acpi_listenpuis en amarrant et en déconnectant l'ordinateur portable.

Y a-t-il donc des idées sur la façon de le faire fonctionner.

Peut-être que le problème est résolu par un environnement de bureau, par exemple kde, mais j'utilise xmonad et néanmoins, comme indiqué ci-dessus, il devrait fonctionner même à l'étape de démarrage indépendamment de l'environnement de bureau.

J'utilise ubuntu 16.04 avec la version 4.4.0-22 du noyau.

J'ai également essayé d'ajouter une règle udev comme suit, mais cela n'a pas fonctionné:

ENV{EVENT}=="undock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
ENV{EVENT}=="dock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"

Je viens de remarquer que le fichier docka toujours la valeur 0, que l'ordinateur portable soit ancré ou non.

étudiant
la source

Réponses:

0

Votre script ne définit pas la variable d'environnement DISPLAY. Ça devrait ressembler à ça:

#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
hackerb9
la source
Merci. Je l'ai essayé mais ça ne marche pas. Je ne vois pas non plus pourquoi cela devrait être l'erreur puisque le script fonctionne (avec et sans l'instruction d'exportation) si je l'exécute directement. Je suppose plutôt que le script n'est pas exécuté par acpid.
étudiant
0

J'ai eu la chance de régler les deux DISPLAYet XAUTHORITYd'ajouter un petit sommeil, par exemple

export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...
Zulan
la source
0

J'ai une configuration similaire, mais je n'ai jamais cherché la solution de réagir au dock. C'est intéressant.

Ce que je fais à la place, c'est d'utiliser le gestionnaire d'affichage de Gnome pour régler l'écran LCD sur «off» et l'écran externe comme écran principal. De cette façon, chaque fois que je pose l'ordinateur portable sur la station d'accueil, il bascule sur l'écran externe. Lorsque je le soulève, il revient sur l'écran LCD.

Avoir cela sur la console (démarrer une installation dm-crypt) fonctionne également mais cela a ses nuances. Si le couvercle est fermé, je place l'ordinateur portable sur la station d'accueil et je l'allume, il démarre automatiquement sur l'écran externe (tout, y compris les écrans du BIOS, le lot). Si le couvercle est ouvert, il ne basculera qu'après connexion à GDM.

Pedro
la source