%

OpenBSD sur la Surface Go de Microsoft

Article publié, le et modifié le
15 minutes de lecture

Cet article contient 3190 mots.
Source brute de l'article :
Commit version : 36e3c52

Description

Pour une raison quelconque, j’aime les petits ordinateurs portables et les contraintes qu’ils imposent (tant qu’ils sont encore utilisables). J’ai utilisé un Dell Mini 9 pendant des jours et j’utilisais jusqu’à récemment un MacBook Air 11" comme principale machine de développement, et ce pendant de nombreuses années. Récemment, Microsoft a annoncé une version plus petite et moins chère de ses tablettes Surface, appelées Surface Go, qui ont éveillé mon intérêt.

Présentation de la Surface Go de Microsoft
Présentation de la Surface Go de Microsoft

Matériel

La Surface Go est disponible dans deux configurations matérielles :

  • une avec 4 Go de RAM et un disque eMMC de 64 Go,
  • et une autre avec 8 Go de RAM avec un disque SSD NVMe de 128 Go. (J’ai pris cette dernière).

Les deux sont livrées avec un processeur Intel Pentium Gold 4415Y qui n’est pas très rapide, mais reste certainement utilisable.

La tablette mesure 23,5 cm de long, ~ 17.5 cm de large, ~ 0.8 cm d’épaisseur. Elle a un écran tactile de 10" de diagonale (3:2), recouvert d’un Gorilla Glass et une résolution de 1800x1200. Le pourtour est assez large, spécialement pour un si petit écran, mais cela a du sens sur un périphérique qui est destiné à être tenu, pour éviter les appuis accidentels sur l’écran.

Le clavier et le pavé tactile sont situés sur une dalle amovible distincte, appelée Surface Signature Type Cover, vendue séparément. J’ai opté pour la couverture “bleu de cobalt” qui contient un matériau en alcantara doux, semblable à un tissu. Le couvercle se fixe magnétiquement le long du bord inférieur de l’appareil et présente des claviers et des pavés tactiles reliés par USB. Lorsque le capot est replié contre l’écran, il envoie un signal de veille ACPI et est maintenu magnétiquement sur l’écran. En utilisation normale, le couvercle peut être placé à plat sur une surface ou légèrement relevé d’environ 3/4, près de l’écran pour une meilleure ergonomie. Lorsque vous utilisez l’appareil comme une tablette, vous pouvez faire pivoter le couvercle derrière ce qui arrête automatiquement l’envoi des événements clavier et pavé tactile jusqu’à ce qu’il soit à nouveau retourné.

Le clavier a une bonne quantité de touches et une bonne disposition, avec Home / Fin / Page Up / Page Down accessible via Fn + Gauche / Droite / Haut / Bas, mais aussi les touches Home / Fin / Page Up / Page Down dédiées. Je trouve les touches F9 à F12 assez utiles puisque la disposition du clavier est un peu petite. Par défaut, les touches F1 à F12 n’envoient pas les codes de touches F1-F12, la touche Fn doit être utilisée, soit enfoncée temporairement , soit appuyée pour activer le verrouillage Fn. Les touches sont rétroéclairées avec trois niveaux de réglage, gérés par le clavier lui-même avec la touche F7.

Le pavé tactile du Type Cover est un pavé tactile Windows Precision connecté via USB HID. Il a un clic décent, mais lorsque la couverture est inclinée au lieu d’être plate sur une surface, cela sonne un peu creux et bon marché.

'Hello from OpenSBD' depuis la Surface Go de Microsoft
'Hello from OpenSBD' depuis la Surface Go de Microsoft

L’écran tactile est alimenté par une puce Elantech connectée via HID-over-i2c, qui prend également en charge la saisie au stylet. Un stylet Surface Pen est disponible séparément auprès de Microsoft et est disponible dans les mêmes couleurs que les dalles amovibles “Type Covers”. Le stylet fonctionne sans aucun appairage, bien que le bouton supérieur fonctionne en Bluetooth, il faut donc l’appairer pour l’utiliser. Dans tous les cas, le stylet nécessite une pile AAAA pour fonctionner. Le stylet peut être fixé magnétiquement sur le côté gauche de l’écran lorsqu’il n’est pas utilisé.

Une béquille peut basculer derrière l’écran pour utiliser la tablette dans un format de portable pouvant s’ajuster à n’importe quel angle jusqu’à environ 170 degrés. La béquille reste fermement en place partout où elle est positionnée, ce qui signifie également qu’elle nécessite un peu de force pour la sortir lors de la première mise en place de la Surface Go sur un bureau.

En haut de l’écran, vous trouverez un bouton d’alimentation et des boutons à bascule pour le volume du son. Sur le côté droit se trouvent la prise casque 3,5 mm, le port USB-C, le port d’alimentation et le logement pour carte microSD située derrière la béquille.

La charge peut être effectuée via le port USB-C ou le port de charge dédié, qui accueille une fixation magnétique similaire à l’adaptateur MagSafe de première génération d’Apple. Le câble de charge a une LED blanche qui brille quand il est connecté, ce qui est assez ennuyeux car il est près de la ligne médiane de l’écran plutôt que vers le bas du clavier. Contrairement au MagSafe d’Apple, le voyant n’indique pas si la batterie est chargée ou non. La prise du chargeur électrique peut être placée vers le haut ou le bas, mais dans les deux sens, je trouve que le câble d’alimentation qui en sort est soumis à une contrainte gênante en raison de la position verticale du port.

La connectivité sans fil est assurée par une puce Qualcomm Atheros QCA6174 802.11ac qui fournit également une connectivité Bluetooth.

La plupart des capteurs de l’appareil, tels que le gyroscope et le capteur de lumière ambiante, sont connectés derrière un périphérique PCI Intel Sensor Hub, ce qui permet de réaliser des économies d’énergie car le processeur hôte n’a pas à interroger les capteurs en permanence.

Firmware

Pour accéder au menu BIOS ou micrologiciel de la Surface Go, maintenez le bouton Volume Haut enfoncé, puis appuyez sur le bouton Marche / Arrêt et relâchez-le, puis relâchez la touche Volume Up lorsque le menu apparaît. Secure Boot ainsi que divers composants matériels peuvent être désactivés dans ce menu. L’ordre de démarrage peut également être ajusté. Un menu de démarrage temporaire peut être affiché de la même manière, mais en utilisant plutôt Volume Down.

Installer OpenBSD

L’installation était très facile, le clavier “Type Cover” fonctionnant immédiatement, la plupart du matériel étant des composants PC standard.

Pour démarrer l’installateur d’OpenBSD, utilisez dd pour installer l’image install64.fs sur un disque USB ; entrez dans le BIOS comme indiqué ci-dessus et désactivez “Secure Boot”, puis définissez le périphérique USB comme priorité de démarrage.

Lorsque vous partitionnez le SSD de 128 Go, vous pouvez supprimer en toute sécurité la partition Windows Recovery qui occupe 1 Go, car elle ne peut pas réparer une partition Windows totalement supprimée et une image de récupération complète peut être téléchargée du site Web Microsoft et copiée sur un disque USB.

Après avoir installé OpenBSD mais avant de redémarrer, montez la partition EFI ( sd0i ) et supprimez le répertoire /EFI/Microsoft. Sans cela, la tablette peut essayer de démarrer le chargeur de récupération Windows. Le chargeur de démarrage EFI d’OpenBSD /EFI/Boot/BOOTX64.EFI sera chargé par défaut.

Un inconvénient à noter : si vous appuyez sur le pavé tactile ou si vous appuyez sur les touches F1 à F6 lors de l’installation, le “Type Cover” détachera tous ses périphériques USB, puis les ré-activera. Cela est dû au fait que le ramdisk ne contient aucun pilote de pavé tactile ou autre périphérique prenant en charge les contrôles de consommation USB HID pour les touches F1-F6. Par conséquent, les canaux USB de ces périphériques ne sont pas fonctionnels. Il est probable que le “Type Cover” se redémarre dans cette situation en tant que sécurité intégrée pour le forcer à se rattacher, plutôt que de demander à l’utilisateur de détacher le capot et de le rattacher.

Cela ne se produira pas pour le pavé tactile une fois que le noyau normal sera démarré car il contient le pilote umt. Lisez mes remarques ci-dessous pour utiliser usbhidcontrol afin de répondre aux touches F1-F6 qui maintiendront le bon canal USB ouvert afin d’empêcher le détachement ou la réinstallation lors de l’utilisation de ces touches.

Journal de support OpenBSD

23-08-2018 : J’ai reçu la Surface Go et j’ai démarré un disque USB OpenBSD après avoir désactivé Secure Boot. J’ai pu installer OpenBSD à la place de la partition Windows, en conservant la partition de récupération Windows. Après le redémarrage, la Surface a continué d’essayer de démarrer Windows Recovery, qui échouait encore et encore. J’ai démarré sur une installation USB Windows et j’ai pu utiliser EasyUEFI pour ajouter une nouvelle option de démarrage UEFI et démarrer explicitement le BOOTX64.EFI d’OpenBSD. OpenBSD démarre maintenant par défaut.

J’ai remarqué que l’écran avait un pixel mort dans le coin inférieur gauche, alors j’ai décidé de l’apporter au Microsoft Store proche pour un échange. Mais avant, je devais réinstaller Windows, ce qui a pris plusieurs heures, car la partition de récupération Windows ne peut actuellement rien récupérer si la partition Windows a été effacée. J’ai téléchargé une image de récupération de la Surface à partir du site Web de Microsoft et créer un disque USB pour réinstaller Windows. Finalement, je me suis rendu au Microsoft Store et ils m’ont rapidement donné une nouvelle en échange.

Lors de l’installation d’OpenBSD sur le nouveau périphérique, j’ai décidé d’effacer la partition de récupération de Windows car elle est de toute façon inutile et me permettrait d’économiser un gigaoctet d’espace supplémentaire. Avant de redémarrer, j’ai compris que les variables de démarrage UEFI pointaient d’abord vers les fichiers EFI de récupération de Windows dans \EFI\Microsoft. J’ai donc supprimé tout ce répertoire en laissant \EFI\Boot\BOOTX64.EFI qui est le chargeur de démarrage d’OpenBSD. Cela a fonctionné comme prévu et OpenBSD démarre maintenant par défaut.

24-08-2018 : Le pavé tactile du Type Cover se connecte à ums mais c’est un pavé tactile Windows Precision qui devrait donc fonctionner comme mon pilote imt , mais via USB. ums ne prend en charge qu’un seul doigt de saisie et le matériel a la fonction “tap-to-click” activée par défaut, il ne peut pas être désactivé. J’ai écrit un nouveau pilote umt pour le brancher sur USB à la place de hidmt, ensuite j’ai perdu beaucoup de temps pour déboguer les raisons pour lesquelles le périphérique ne fonctionnait pas correctement dans le mode PTP. Je l’ai traqué jusqu’à trouver une certaine confusion entre ihidev et hidmt qui devait être corrigés en premier, j’ai donc envoyé un diff à tech@.

25-08-2018 : J’ai envoyé les modifications des pilotes ihidev et hidmt et un diff pour importer umt à tech@ pour analyse. Il a été rapidement importé .

28-08-2018 : Ces deux derniers jours, j’ai passé du temps à chercher ce qui était nécessaire pour que l’écran tactile Elan fonctionne. Il s’attache à ihidev en tant que périphérique HID-over-i2c, mais il ne s’attache pas à imt. Finalement, j’ai découvert que ce n’est pas un périphérique compatible PTP, mais conforme à l’ancien multitouch de type Windows 8. J’ai commencé à ajouter un support pour ces périphériques de type Windows 8 à hidmt et déplacé du code dupliqué dans umt et imt dans hidmt.

J’ai aussi examiné les boutons de volume en haut de l’écran. Malheureusement, ils ne fonctionnent pas avec notre pilote acpisurface existant, alors j’ai démarré un disque USB Linux et ai tracé leur fonctionnement. Apparemment, c’est un périphérique “Intel 5-button Array” qui fonctionne via ACPI. J’ai écrit un nouveau pilote acpihid pour cela et les boutons de volume contrôlent maintenant le volume audio. Il y a certaines surcharges dans acpihid, dans la gestion du bouton d’alimentation et de la méthode d’interruption ACPI GPE standard, afin de recevoir la pression sur le bouton d’alimentation. J’ai donc dû prendre en compte que acpibtn capture acpihid s’il est attaché. Ce serait bien s’il y avait une variable sysctl comme machdep.lidaction qui spécifiait si le bouton d’alimentation était en mode arrêt, suspendu ou ne faisait rien.

29-08-2018 : Je voulais faire fonctionner les fonctions F1 à F6 du clavier (luminosité, lecture / pause, sourdine, diminution / augmentation du volume) sur le Type Cover. Actuellement, chaque fois qu’ils sont pressés, le Type Cover redémarre, car le rétro-éclairage s’éteint et tous ses périphériques USB se détachent puis se reconnectent. En traçant comment cela fonctionne sous Linux, j’ai vu qu’il s’agissait essentiellement d’utiliser leur pilote générique hid-input, donc il ne devrait pas avoir besoin de le personnaliser. J’ai commencé à travailler sur un pilote générique d’entrée USB HID (contrairement à ukbd / hidkbd qui nécessite des utilisations spécifiques au clavier), mais j’ai eu des soucis sur usbhidaction que nous avons déjà en base et qui devrait bien fonctionner pour cette tâche.

Malheureusement, usbhidaction requiert de connaître le chemin spécifique uhid du périphérique HID qui doit être contrôlé et le quitter dès que le périphérique disparaît. Pour la dalle Type Cover de la Surface, ce périphérique peut changer en fonction de ce qui a été branché au démarrage, et se détachera à chaque fois que la machine sera arrêtée alors usbhidaction s’arrêtera simplement.

Après avoir passé beaucoup de temps à modifier usbhidaction pour interroger le périphérique /dev/usbN afin d’attendre les ajouts et les suppressions de périphérique, j’ai réalisé que la page de manuel était obsolète et que tous ces événements étaient sortis du noyau il y a plusieurs années. J’ai enlevé cette ligne dans la page de manuel.

30-08-2018 : Afin d’être capable d’utiliser usbhidaction pour qu’il trouve automatiquement un périphérique USB en fonction de son fournisseur et de son identifiant, et être capable d’attendre que le périphérique s’affiche automatiquement, je l’ai connecté à /dev/hotplug. Malheureusement, hotplug ne prend en charge qu’un seul lecteur simultané. J’ai donc implémenté le clonage de périphérique dans le pilote hotplug afin que plusieurs processus puissent lire à partir de /dev/hotplug et que chacun reçoive sa propre file d’événements. Je l’ai envoyé par courrier électronique à la liste des développeurs OpenBSD et j’ai reçu quelques premiers commentaires à ce sujet.

J’ai fait beaucoup de progrès sur les changements d’ usbhidaction, et je les ai envoyés dans mon arborescence.

J’ai également envoyé un changement en amont pour créer 8 périphériques /dev/uhidN, puisqu’il n’y en avait que 4 auparavant.

31-08-2018 : J’ai décidé d’abandonner mon support multitouch Windows 8 pour le moment, car l’écran tactile devrait être utilisable avec le support de base par ims (agissant comme une souris à un bouton). Utiliser imt signifiait de réclamer tous les rapports HID (25 !) sur le périphérique, ce qui brisait la prise en charge de l’utilisation d’un stylet et mon stylet Surface est arrivé, je voulais l’utiliser. De cette façon, ims peut juste l’attacher au rapport de l’écran tactile et un autre ims peut l’attacher au rapport de saisie du stylet.

En faisant des ims correspondant aux rapports de l’écran tactile, je suis tombé sur ce qui ressemble à un bogue dans notre analyseur HID (ou, il n’est tout simplement pas pris en charge) où il correspondait à l’utilisation de pages qu’il ne devrait pas. Le résultat de ceci était que, quand hidms cherchait la page d’utilisation indiquant le minimum logique et le maximum X / Y de l’écran (afin de pouvoir mapper les coordonnées d’entrée de l’écran tactile sur l’affichage de l’écran), il y avait des utilisations pour d’autres choses sans rapport, cela faisait penser au pilote que l’écran était beaucoup plus grand qu’il ne l’était. Lorsque je touchais l’écran et que je le parcourais complètement, cela ne faisait déplacer le curseur que d’un quart environ.

J’ai envoyé un diff à tech@ pour contourner cet ims et attacher des ims aux écrans tactiles.

01-09-2018 : Les diff d’hidms et d’ims ont été acceptés. OpenBSD 6.4 prendra en charge l’écran tactile, le stylet, le clavier et le pavé tactile multitouch.

Je suis toujours en attente de retours sur mon changement de hotplug, ce qui me permettra ensuite de développer plus profondément mes modifications sur usbhidaction.

J’ai aussi besoin de commencer à travailler sur un pilote pour le périphérique PCI Intel Sensor Hub qui me permettrait ensuite de prendre en charge le capteur de lumière ambiante et le gyroscope pour la détection de la rotation. Cependant, en regardant le pilote Linux, il semble qu’il y ait une tonne de code et bien sûr, il n’y a pas de documentation ouverte pour que je puisse trouver.

Résumé du support actuel d’OpenBSD

Le statut est relatif à OpenBSD-current en date du 03-09- 2018.

Composant Fonctionnel Remarques
Adaptateur électrique AC Oui Pris en charge via acpiac et le statut est disponible via apm et hw.sensors , qui supporte également la charge via USB-C.
Détecteur de lumière ambiante Non Connecté derrière un périphérique PCI Intel Sensor Hub qui nécessite un nouveau pilote.
Audio Oui Audio HDA ​​avec un codec Realtek 298 pris en charge par azalia.
État de la batterie Oui Pris en charge via acpibat et le status est disponible via apm et hw.sensors.
Bluetooth Non Le périphérique Atheros apparaît comme un périphérique ugen , mais OpenBSD ne prend pas en charge le Bluetooth. Peut être désactivé dans le BIOS.
Les caméras Non Il existe apparemment des caméras avant, arrière et infrarouge, dont aucune n’est prise en charge (ni souhaité). Peut être désactivées dans le BIOS.
Le Gyroscope Non Connecté derrière le périphérique PCI Intel Sensor Hub qui requiert un nouveau pilote qui pourrait alimenter le [[https://man.openbsd.org/man9/sensor_attach.9
Hibernation Oui Fonctionne bien avec zzz
Slot MicroSD Oui Un Realtek RTS522A, supporté par rtsx.
Le SSD Oui Le périphérique Toshiba NVMe accessible via nvme.
Le stylet Oui Fonctionne sur l’écran tactile via ims. Le bouton situé en haut du stylet nécessite la prise en charge du Bluetooth qui n’est pas pris en charge. Du fait que dwiic nécessite toujours l’interrogation de ces chipsets, dessiner avec le stylet n’est pas aussi fluide qu’avec des interruptions correctes.
Mise en veille / Réveil Oui Fonctionne bien à partir de zzz et en fermant le Type Cover contre l’écran. Il ne se réveille pas automatiquement lorsque vous retirez le Type Cover, il faut appuyer sur le bouton d’alimentation pour le réveiller.
L’Écran tactile Oui HID-over-I2C, supporté par ims.
Le clavier Type Cover Oui USB, supporté par ukbd. 3 niveaux de contrôle du rétroéclairage sont réglables par le clavier lui-même avec F7. Les actions des touches F1 à F6 apparaissent dans le rapport 3 et peuvent être répondues avec usbhidaction -u 045e:096f -r 3.
Le pavé tactile Type Cover Oui USB, pris en charge par mon nouveau pilote umt pour le multitouch à 5 doigts, le défilement à deux doigts, l’hystérésis et être capable de désactiver le tap-to-click qui est activé par défaut en mode souris normal.
USB Oui Le port USB-C fonctionne bien pour les données et la charge.
La Vidéo Oui inteldrm a pris en charge Kaby Lake en ajoutant la vidéo accélérée, le DPMS, le contrôle gamma, le contrôle de rétroéclairage intégré et la reprise S3 appropriée.
Les boutons de volume Oui Intel à 5 ​​boutons, pris en charge par mon nouveau pilote acpihid non encore importé en amont.
Wifi Non Puce sans fil Qualcomm Atheros QCA6174 802.11ac, non prise en charge. FreeBSD a un port en cours de travail d’ath10k partir de Linux (sous licence ISC) qui peut être porté. J’utilise actuellement un petit adaptateur sans fil USB-A qui est rendu moins volumineux par un adaptateur USB-A vers USB-C.

Remerciements

Avec l’aimable autorisation de Joshua Stein !

Cette page est la traduction de la page [OpenBSD on Microsoft Surface Go]]]1 du site BSDHowto.ch.


Historique

J’ai écrit historiquement cette traduction sur le wiki de la communauté “OpenBSD Pour Tous”.