Skip to content

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 !

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