dock_hp
Utilisation d\'un laptop HP avec dock USB type C (Debian Stretch) {#utilisation_dun_laptop_hp_avec_dock_usb_type_c_debian_stretch}
On parle de ce dock : https://store.hp.com/FranceStore/Merch/Product.aspx?id=1MK33AA&opt=ABB&sel=ACC
Sous Debian Stretch le dock est reconnu out of the box et toutes les connectiques fonctionnent, à l\'exception des interfaces pour écran DisplayPort. Pour que les écrans soient reconnus, il faut effectuer une montée de version du noyau (via les backports) et installer le module adéquat.
Montée de version du noyau {#montée_de_version_du_noyau}
Le noyau par défaut (4.9) ne supporte pas le reste de la procédure décrite ici (freeze complet lors de l\'application des modifications d\'affichage). Il faut donc installer un noyau supérieur.
NB : Il se peut que cela soit juste la conf Xorg qui ne soit pas bonne, cf la conf post-install. À tester avec le noyau de base.
D\'abord installer le dépôt backports :
# echo 'deb http://ftp.fr.debian.org/debian stretch-backports main contrib non-free' > /etc/apt/sources.list.d/backports.list && apt update
Puis installer le noyau 4.19 (plusieurs versions disponibles) :
# apt install linux-image-4.19.0-0.bpo.5-rt-amd64 linux-source linux-source-4.19
Et les headers (même version que le noyau !) :
# apt install -t stretch-backports linux-headers-4.19.0-0.bpo.5-rt-amd64 linux-compiler-gcc-6-x86
Reboot !
Installation du module DisplayLink {#installation_du_module_displaylink}
DisplayLink fournit un installeur Linux qui ne supporte que Ubuntu et les noyaux 4.4 & 4.15. Heureusement, un petit malin a créé un script qui va télécharger l\'installeur, compiler le module DKMS et installer 2-3 scripts pour faire tourner le tout.
D\'abord, installer les dépendances :
# apt install dkms lsb-release linux-source libdrm-dev libelf-dev
Puis cloner le dépôt https://github.com/AdnanHodzic/displaylink-debian et lancer le script :
$ git clone https://github.com/AdnanHodzic/displaylink-debian.git && cd displaylink-debian/ && sudo ./displaylink-debian.sh
Suivre les indications proposées et rebooter.
Config post-install {#config_post_install}
Le script a compilé un module DKMS nommé
evdi qui est chargé par le
service systemd displaylink-driver. Vérifier que le module est présent
:
$ lsmod | grep evdi
evdi 61440 4
drm_kms_helper 204800 2 evdi,i915
drm 491520 18 drm_kms_helper,evdi,i915
Et vérifier que les écrans sont reconnus :
$ xrandr --listproviders
Providers: number : 3
Provider 0: id: 0xb6 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 3 outputs: 4 associated providers: 0 name:modesetting
Provider 1: id: 0x8f cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting
Provider 2: id: 0x41 cap: 0x2, Sink Output crtcs: 1 outputs: 1 associated providers: 0 name:modesetting
Si le nombre de fournisseurs renvoyé est >1, c\'est bon ! Il faut maintenant connnecter le(s) Sink Output (Provider 1 et 2 dans l\'exemple ci-dessus) au Source Output (Provider 0) :
$ xrandr --setprovideroutputsource 1 0
$ xrandr --setprovideroutputsource 2 0
À partir de là, les écrans sont disponibles à la configuration dans les
paramètres de l\'environnement de bureau ou directement via xrandr.
Lors de l\'installation du module, le script est censé détecter la carte graphique et ajuster la conf Xorg avec des paramètres spécifiques. Ce ne fut pas le cas pour moi avec le chipset Intel embarqué sur un Probook 430 G5.
$ lspci -nnk | grep -i vga
00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:5917] (rev 07)
Les écrans étaient reconnus mais l\'affichage défaillant (clignotements,
fenêtres impossibles à déplacer entre écrans, etc). J\'ai dû ajouter
ceci dans /etc/X11/xorg.conf.d/20-displaylink.conf :
Section "Device"
Identifier "DisplayLink"
Driver "modesetting"
Option "PageFlip" "false"
EndSection
Une conf différente peut être requise selon le chipset. La doc du script s\'avère alors très utile : https://github.com/AdnanHodzic/displaylink-debian/blob/master/post-install-guide.md.
NB : la conf des écrans n\'est pas mémorisée entre 2 boots, il faut donc
soit rentrer les commandes xrandr qui vont bien dans le fichier
~/.xsessionrc pour qu\'elles soient automatiquement exécutées à chaque
ouverture de session graphique, soit suivre la section suivante pour
activer les écrans dès le login graphique.
pour buster {#pour_buster}
sur les portables HP440G6 l\'affichage bug pas mal il faut mettre dans : /etc/X11/xorg.conf.d/20-displaylink.conf
Section "OutputClass"\
Identifier "DisplayLink"\
MatchDriver "evdi"\
Driver "modesetting"\
Option "AccelMethod" "none"\
EndSection
Activer les écrans au display manager {#activer_les_écrans_au_display_manager}
GDM
Comme l\'activation des écrans se fait via xrandr, il faut forcer GDM
à utiliser Xorg au lieu de Wayland en décommentant la ligne suivante
dans /etc/gdm3/daemon.conf :
WaylandEnable=false
ensuite, créer 2 fichiers identiques (?)
/etc/xdg/autostart/displaylink.desktop et
/usr/share/gdm/greeter/autostart/displaylink.desktop avec la conf
suivante :
[Desktop Entry]
Type=Application
Name=DisplayLink
Exec=sh -c "xrandr --setprovideroutputsource 1 0; xrandr --setprovideroutputsource 2 0; xrandr --output DVI-I-2-2 --auto --pos 0x0 --output DVI-I-1-1 --primary --auto --pos 1920x0 --output eDP-1 --auto --pos 3840x0"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer
Bien sûr, la commande xrandr est à adapter selon votre disposition
d\'écrans.
Bascule auto {#bascule_auto}
Si votre desktop manager ne gère pas la bascule directe, lancer ce script au démarrage (avec un & pour qu\'il rende la main)
#!/bin/sh
for i in 1 2 3 4 ; do
xrandr --setprovideroutputsource $i 0
done
state="disconnected"
while true ; do
if [ "$state" = "disconnected" ] && xrandr | grep -q '^DVI-I-1-1 connected' ; then
xrandr --output DVI-I-1-1 --auto --primary
xrandr --output DVI-I-2-2 --auto --right-of DVI-I-1-1
xrandr --output eDP-1 --off
state="connected"
fi
if [ "$state" = "connected" ] && xrandr | grep -q '^DVI-I-1-1 disconnected' ; then
xrandr --output eDP-1 --auto --primary
xrandr --output DVI-I-2-2 --off
xrandr --output DVI-I-1-1 --off
state="disconnected"
fi
sleep 2
done