Stations d'accueil USB 3 et technologie DisplayLink sous Ubuntu
J'ai récemment changé de PC portable, et comme mon précédent ordinateur utilisait une station d'accueil propriétaire qui n'est plus compatible avec les nouveaux modèles, j'ai également dû faire l'acquisition d'une nouvelle station (merci Lenovo)... Je voulais à la base prendre une station d'accueil Thunderbolt 3 (connecteur USB C)... mais je me suis planté en la commandant, et je me suis retrouvé avec une station USB 3.0... zut. Je vais donc vous partager mon retour d'expérience sur ce type de matériel et vous expliquer comment le faire marcher sous Linux (enfin surtout sous Ubuntu).
Pour commencer, il faut savoir que les stations USB 3 ne peuvent pas alimenter le PC, il y a donc au minimum 2 câbles à brancher : l'alimentation et le dock. C'est un peu plus d'efforts que ce que j'avais avant, mais c'est pas la mort non plus, et c'est toujours mieux que de brancher la dizaine d'autres câbles tout le tour du PC.
Ensuite, bonne surprise : tout est reconnu de base (ports USB, Ethernet, casque,...)... sauf la partie vidéo, mais ça il fallait s'y attendre. Je n'avais jamais eu de dock USB 3 auparavant donc j'ai commencé par essayer de voir ce qui était utilisé dans la station d'accueil pour transmettre la vidéo. Pour ce faire, j'ai regardé les logs du kernel pour voir ce qu'il avait détecté :
$ dmesg
et voici ce que j'y ai trouvé :
[50061.749655] usb 2-4.1: new SuperSpeed Gen 1 USB device number 13 using xhci_hcd [50061.774152] usb 2-4.1: New USB device found, idVendor=17e9, idProduct=4340, bcdDevice=31.01 [50061.774157] usb 2-4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [50061.774159] usb 2-4.1: Product: ThinkPad USB 3.0 Ultra Dock [50061.774162] usb 2-4.1: Manufacturer: DisplayLink [50061.774164] usb 2-4.1: SerialNumber: XXXXXXXXXXXXXXXXXXXX
« DisplayLink »... Tiens, ça sonne bien comme un truc pour transmettre de la vidéo ça. J'ai donc fait quelques recherches et effectivement j'avais vu juste...
Technologie DisplayLink
Après quelques recherches, je me suis rendu compte que c'est la technologie qui semble être utilisée dans tous les docks USB 3 (en tout cas je n'ai rien trouvé d'autre). On la retrouve notamment dans les stations d'accueil Lenovo, Dell, HP, Acer, Asus, Targus, Belkin, Kensington, et bien d'autres...
Sous Linux, le support de cette technologie se fait à l'aide de deux composants :
- le module EVDI pour le kernel,
- et un pilote propriétaire.
Le module EVDI (pour Extensible Virtual Display Interface) est Open Source et est développé directement par DisplayLink. Ce module doit être compilé et chargé dans le noyau Linux. Il apporte le support d'écrans virtuels, qui peuvent être exploités via la bibliothèque libevdi, développée également par DisplayLink. Ce module n'est cependant pas suffisant pour faire marcher le dock, il n'apporte qu'une fonctionnalité nécessaire au fonctionnement du pilote propriétaire.
Le pilote propriétaire quant à lui va prendre l'image de l'écran virtuel créé par le module EVDI, puis il va la compresser et la transmettre à la station d'accueil (en USB, en Wifi ou autres en fonction de la technologie employée par le dock).
DisplayLink développe donc un pilote officiel pour Linux, ce qui est plutôt cool, même si on l'aurait préféré Open Source. Il y a cependant un hic : leur pilote ne vise que Ubuntu. Ils ne se préoccupent pas des autres distributions. Il ne devrait pas y avoir de problème si vous vous utilisez Ubuntu, Debian ou leurs nombreux dérivés, mais pour les autres, il faudra probablement un peu plus de travail pour faire marcher l'engin. J'ai toutefois trouvé un paquet sur AUR pour les utilisateurs d'ArchLinux, et il est probable qu'il existe d'autres paquets non officiels pour d'autres distributions.
Installation du pilote DisplayLink sous Ubuntu
Note
Note : J'ai testé toute la procédure ci-dessous sous Ubuntu 19.04. Il se peut que cela fonctionne pas sur d'autres versions. Si cela ne marche pas chez vous, ça m'intéresse de le savoir. Vous pouvez me contacter via mon formulaire de contact.
1. Désactiver Secure Boot
La première chose à faire, c'est de désactiver le Secure Boot, sinon on ne va pas pouvoir charger le module EVDI dans le noyau Linux.
Avis
Attention : Si vous avez un dualboot, la désactivation du Secure Boot peut empêcher Windows de démarrer jusqu'à sa réactivation. Si vous ne pouvez pas désactiver Secure Boot, sachez qu'il est possible de signer le module EVDI, mais il faudra le resigner à chaque mise à jour du kernel. Vous trouvez plus d'informations sur ce thread StackOverflow.
La procédure pour désactiver Secure Boot varie d'un constructeur de PC à l'autre. Je vais vous montrer la procédure pour une machine Lenovo / Thinkpad, car c'est ce que j'utilise, mais il y aura probablement des différences chez vous si vous utilisez un PC d'une autre marque.
Pour commencer il faut rentrer dans l'écran de réglage du BIOS / UEFI. Sur mon Thinkpad, il faut pour cela maintenir la touche <Enter> pressée lorsque le logo Lenovo est affiché lors du démarrage de la machine (1), puis appuyer sur la touche F1 lorsque le menu apparaît (2).
Ensuite, il faut se rendre dans le menu Security → Secure Boot (3), puis le définir à Disabled (4).
Enfin il faut quitter en sauvegardant les paramètres en pressant la touche <F10>.
2. Installer le pilote
Une fois le Secure Boot désactivé, on peut passer à l'installation du pilote.
Pour commencer, il faut installer DKMS. C'est l'outil qui permettra la compilation (et la recompilation automatique lors des mises à jour du kernel) du module EVDI utilisé par le pilote DisplayLink. Pour ce faire, rien de plus simple, c'est dans les dépôts :
$ sudo apt install dkms
Il faut ensuite télécharger la dernière version du pilote sur le site de DisplayLink. Au moment où j'écris cet article, il s'agit de la version 5.1 :
Note
Note : bien qu'il soit écrit sur le site que ce pilote vise Ubuntu 16.04 et 18.04, il fonctionne bien avec Ubuntu 19.04.
Une fois l'archive .zip contenant le pilote téléchargée, il faut l'extraire. Vous pouvez le faire graphiquement avec clic droit → Extraire ici ou via la commande suivante :
$ unzip DisplayLink*.zip
ce qui nous donne un fichier .run contenant le pilote et un fichier de licence. Il ne nous reste plus qu'à rendre le fichier .run exécutable :
$ chmod +x displaylink-driver-*.run
puis à le lancer avec des droits administrateur :
$ sudo ./displaylink-driver-*.run
Si tout c'est bien passé, il suffit de brancher (ou de débrancher puis rebrancher) le dock USB au PC, et les écrans supplémentaires devraient être détectés (du moment qu'ils sont bien branchés à la station).
Mon avis sur les docks USB 3
Parlons à présent des sujets qui fâchent... Qu'est-ce que ça vaut vraiment ces docks USB 3... Je n'irais pas jusqu'à faire mon Jean-Pierre Coffe et vous sortir un « Mais c'est d'la merde ! »... mais je dois bien reconnaître que c'est pas fou.
La technologie DisplayLink crée des écrans virtuels, dont les images vont être compressées puis streamées au dock à travers le port USB. Cela pose deux problèmes :
- les écrans virtuels et la compression de leurs images consomment des ressources sur la machine,
- et on consomme de la bande passante sur le port USB pour transmettre le tout à la station d'accueil.
Pour ce qui est de la bande passante USB, je n'ai pas l'impression d'avoir eu de soucis particuliers, par contre les performances des écrans externes se sont avérées catastrophiques.
En utilisation « normale », c'est-à-dire avec un navigateur web affiché sur l'un des écrans, et un terminal sur l'autre, ça va... J'ai eu quelques micro-freezes de mon affichage (et pas uniquement sur les écrans externes) de temps à autre... c'est chiant, mais on peut faire avec....
Par contre quand j'ai essayé d'afficher des vidéos sur les écrans externes, là j'ai pu bien mettre en évidence le problème : le pilote DisplayLink s'est mis à consommer énormément ressources, et toute l'interface du PC est devenue tellement lente que c'était totalement inutilisable.
Je ne sais pourquoi tout l'affichage est ralenti à ce point. Peut-être que le pilote pour Linux est encore trop immature. Je n'ai malheureusement pas eu le temps de tester intensivement sous Windows pour pouvoir comparer, mais je pense que des problèmes similaires doivent se produire sur cette plateforme également (mais peut-être à des degrés moindres).
Quoi qu'il en soit, je pense que les stations d'accueil USB 3 peuvent dépanner dans certains cas, mais elles ne sont pas assez performantes pour mes besoins au quotidien. Si votre ordinateur vous permet une alternative (docks Thunderbolt 3 ou propriétaire), je vous recommande vivement ce genre de solutions, même si elles sont plus chères.
Et tant qu'on parle d'argent, je vous recommanderais de vous tourner vers une autre marque que Lenovo pour ce genre de station. Je n'ai rien à leur reprocher hein, leur matos est d'excellente qualité... mais bien trop cher pour ce type de dock.
Pour ma part j'ai d'ores et déjà commandé (et reçu) une station Thunderbolt 3, et ça va beaucoup mieux. Si j'en ai le temps et la motivation, j'essayerais de vous écrire un petit résumé des différents types de stations d'accueil qui existent et leur compatibilité avec Linux.