Windows et le yoyo des écrans....

Sous Windows lorsqu'on utilise plusieurs écrans se pose un problème majeur : si un des écrans passe en veille, déconnecté ou non alimenté, toutes les fenêtres ouvertes passent sur l'écran qui reste disponible. Dans l'absolu c'est logique sur un laptop sur lequel on connecte occasionnellement un écran externe, par contre sur un PC fixe que l'on utilise en permanence avec trois écrans il est extrêmement désagréable de devoir réorganiser ses fenêtres tous les matins... (sujet déjà évoqué ici).

La faute à qui, à quoi ?

Le problème se situe au niveau de la gestion de l'EDID (ici pour les détails).  Il s'agit d'une implémentation dans les écrans qui va transmettre à Windows pas mal d'informations, dont :

  • La résolution d’écran,
  • La profondeur de couleur prise en charge,
  • La résolution et fréquence d’images prises en charge,
  • Le rapport hauteur / largeur
  • Le format audio pris en charge, par exemple, par exemple sur un téléviseur ne prend en charge que les formats 2.0 ou 5.1,

Selon l’année de production du téléviseur ou du moniteur, la version prise en charge d’EDID peut être 1.0, 1.4, 2.0, 3.0 ou plus. Ces informations ne sont bien sur pas modifiables par l'utilisateur mais en dur dans l'écran. A noter également que certains moniteurs permettent de désactiver une partie des informations transmises via le port HDMI ou DP. On peut alors faire un réglage manuel et Windows ne verra pas l'écran disparaitre. Ca résout le problème.

Mais hélas ce n'est pas le cas de mes écrans Samsung.

Il faut savoir que sous Windows il n'y a absolument aucune solutions native ou via un utilitaire pour désactiver l'auto détection des écrans. Ca existait jadis sous Windows 7, sous la forme d'une clé de registre, mais depuis que Windows est devenu avant tout un outil de collecte de données c'est terminé, le marketing a probablement décidé d'éliminer tout ce qui pourrait générer du support... Et pourtant la demande est bien présente !

Contournement

J'ai exploré le net dans tous les sens et les seules solutions disponibles sont matérielles. Il s'agit de dongle HDMI qui se branchent sur le port HDMI ou DP (ou via un adaptateur USB-S) entre le PC et les écrans. Il s'agit d'un émulateur EDID qui va faire croire à Windows (ça doit être identique sous MacOS) que l'écran est présent alors même qu'il est en veille, off ou débranché.

Fonctionnement

La première fois qu'on insère le dongle entre le PC et l'écran (ça ne se connecte pas sur l'écran mais sur le PC) il va détecter les informations transmise par l'EDID. Ensuite on débranche brièvement le câble de l'écran, la diode du dongle clignote ce qui indique qu'il enregistre la configuration EDID de l'écran. A partir de là on pourra éteindre ou déconnecter l'écran, Windows considèrera toujours qu'il est présent.

Attention : Ces informations étant propre à chaque écran, il faudra faire un reset du dongle si on change d'écran.

On trouve sur le marché plusieurs modèles à partir de 14 €, tous ne fonctionnent pas bien et certains sont limités en résolution. J'avais d'abord commandé ce modèle de chez Fueran qui dans mon cas ne fonctionne pas. C'est avec ces deux modèles Sonero (Manuel) et Digitus (fiche tech.) que j'ai eu les meilleurs résultats en 4K jusqu'à 60 Hz en ce qui me concerne, HDR non supporté). Il existe également ce modèle développé à cet effet et qui donne de bons résultats (je vais en avoir deux à revendre, ainsi qu'un modèle DP)

Sur Amazon il existe d'autres modèles et je veux bien un retour si vous testez autre chose. N'oubliez pas que chez eux le retour est gratuit, alors n'hésitez pas à tester. D'ailleurs celui-ci serait à tester car il permet un réglage manuel de la résolution...

Complications

Si dans la majorité des cas ça se passe bien, j'ai dans ma configuration j'ai un écran Samsung M7 en 43" (par ailleurs très bien pour 450 €) qui se dit intelligent et qui a eu dans mes tests parfois des comportements bizarres :

  • L'écrans n'était reconnu qu'en FHD et non 4K : la seule solution passe par une réinitialisation en config usine.
  • Ecran noir mauvaise disposition d'écrans après une déconnection ou mise en veille !

Dans ce dernier cas le fait de la basculer entre 30 et 60 Hz dans les paramètres le réactive. Mais si ça se reproduit c'est fastidieux de chaque fois aller dans les paramètres (pour peu que les dits paramètres n'aillent pas s'ouvrir sur l'écrans qui est noir...). Heureusement il existe des commandes en CLI qui vont permettre de créer un raccourcis, voire de les lancer à distance (dans mon cas via Home Assistant Agent).

Forcer la résolution et la fréquence de rafraichissement

J'ai utilisé alternativement en 30 ou 60 Hz l'outil NirCMD de chez NirSoft :

C:\Tools\nircmd setdisplay monitor:DISPLAY1 3840 2160 32 30
ou
C:\Tools\nircmd setdisplay monitor:DISPLAY1 3840 2160 32 60

Changer l'échèle (DPI)

J'ai trouvé l'utilitaire SetDPI (1 étant le numéro d'écran, qui ne correspond bizarrement pas aux numéros édictés par Windows, et ensuite la valeur DPI) :

C:\Tools\setdpi 1 150

Définir l'écran principal

Avec MultiMonitorTool de chez NirSoft pour définir l'écran principal :

C:\Tools\multimonitortool /SetPrimary \\.\DISPLAY1

Et pour terminer je viens de trouver Display Changer et Display Changer II qui permettent de résumer tout ça en une seule ligne.

En // je suis en train de tester Persistent Windows qui enregistre les positions et dans l'absolu permet de créer des snapshots de positions...

EDIT 15/10/22

Petit retour d'expérience actualisé.

Les dongle dont j'ai parlé plus haut (Sonero et Digitus) fonctionnent parfaitement. On peut mettre en veille ou éteindre les écrans, les fenêtres ne bougent plus. C'est parfait. Et quand on redémarre le PC il suffit de relancer Persistant Windows pour qu'il ouvre les programmes et positionne les fenêtres à leur place. What else !

Sources

 

 

 
 

 

 

Renommer les dossiers et raccourcis OneDrive

OneDrive de Microsoft, tant en mode Business que grand public est maintenait à peu près à maturité et dans la plupart des cas utilisable, même s'il reste quelques bugs et bizarreries. Par contre il y a des cas de figure, certes pas très courants, qui ne sont pas pris en charge et vont dérouter l'utilisateur final dans le cas d'usage ou l'on installe plusieurs instances.

Si on installe deux instances sur deux tenant différents (on peut travailler pour plusieurs employeurs...), pas de problème et on va se retrouver avec deux répertoires dans le dossier utilisateur et deux raccourcis dans l'explorateur, en fait trois car il y a aussi le dossier OneDrive grand public dont on parlera plus loin :

  • OneDrive
  • OneDrive - Société Truc
  • OneDrive - Société Machin

Vous allez me dire, ou est le problème ? Jusqu'ici aucun. Par contre imaginons maintenant que notre utilisateur ait besoin de synchroniser deux instances sur le même tenant, donc la même entreprise, une assistante qui synchronise le drive de son manager, ou deux filiales qui partagent le même tenant, le cas d'usage n'est finalement pas si rare, et là c'est le bug car on se retrouve avec ça tant sur les répertoires que sur les raccourcis sur l'explorateur de fichiers :

  • OneDrive
  • OneDrive - Société Truc
  • OneDrive - Société Truc(1)

Microsoft vous répondra qu'il n'y a pas de bug et que ça fonctionne très bien, et c'est vrai. Sauf qu'à l'usage, bonjour la confusion. Microsoft vous dira également que ce n'est pas une bonne pratique et qu'il existe des partages de groupe, et ils auront raison. Mais la demande ici était précise et l'utilisateur voulait vraiment synchroniser deux deux instances vraiment séparées sur le même tenant, et vu que le client est roi, et surtout qu'il me fait manger, je vais répondre à sa demande plutôt que de lui expliquer les bonnes manières (je laisse cette tache à Microsoft). Et comme rien n'est prévu pour ce cas d'usage, je vais vous expliquer comment j'ai contourné.

Attention, ces manipulations ne sont pas sans risques, vous savez ce que vous faites et vous assumez vos responsabilités. Dans le cas contraire allez jouer dans le bac à sable. En tous cas ne venez pas pleurer.

Je part du principe que mes deux instances OneDrive sont configurées et actives.

  1. On quitte les deux clients OneDrive (icones bleus en bas à droite) et on s'assure que ça ne tourne plus dans le gestionnaire de taches.
  2. On renomme le dosser OneDrive concerné : OneDrive - Société Truc(1) par OneDrive - Société Truc Services.
  3. En option on peut aussi déplacer ce dossier sur un autre disque (local et pas de disque externe en USB, hein !)
  4. On lance regedit.exe et soit on cherche Société Truc(1), soit plus proprement on va modifier cette chaine dans les clés suivantes :

    Dans HKEY_CURRENT_USER (HKCU) (4 entrées)

    HKCU\Software\Microsoft\OneDrive\Accounts\Business2\UserFolder & DisplayName
    HKCU\Software\Microsoft\OneDrive\Accounts\Business2\ScopeIdToMountPointPathCache\(ID)
    HKCU\Software\Microsoft\OneDrive\Accounts\Business2\Tenants\(name)\(path)
    HKCU\Software\SyncEngines\Providers\OneDrive\(ID)\MountPoint

    Dans HKEY_LOCAL_MACHINE (HKLM) (2 entrée, mais je n'ai rien trouvé dans la première)

    HKLM\SOFTWARE\Microsoft\Security Center\Provider\CBP\(ID)\NAMESPACE
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\OneDrive!(ID)\UserSyncRoots\(SID)
    Il faut un peu tâtonner et ne pas perdre de vue que l'on cherche à remplacer Société Truc(1) par Société Truc Services (la partie après de Onedrive - "(on fait attention aux espaces et aux tirets, quant à l'accent je n'ai pas testé mais ça devrait le faire).

  5. Ensuite on ouvre l'emplacement suivant : %UserProfile%\AppData\Local\Microsoft\OneDrive\settings\Business1
    On y trouve un fichier (ID).ini dans lequel on cherche la ligne commençant par LibraryScope, la première en général, et on change Société Truc(1) par Société Truc Services et on enregistre.
  6. On relance OneDrive et tout devrait bien se passer et on doit retrouver les fichiers dans le bon répertoire et les raccourcis avec les bons noms.
  • OneDrive
  • OneDrive - Société Truc
  • OneDrive - Société Truc Services

Si on n'obtient pas le résultat espéré on va redémarrer (comme souvent sous Windows) et si toujours pas on revient dans regedit.exe et on cherche les entrée Société Truc(1) que l'on aurait pu oublier.

Attention, danger : dans l'admin de Microsoft 365 il est possible de renommer le nom de société et je crois depuis peu (??) le nom OneDrive ailleurs. Ce renommage est à considérer au tout début car si on le fait plus tard ça impactera tous les client OneDrive et SharePoint qui risquent de perdre leurs petits et générer pas mal de support....

Bonus

Comme vous avez pu le remarquer le raccourcis OneDrive (Grand public) est toujours présent dans l'explorateur de fichiers alors qu'il ne sert à rien et prête à confusion en entreprise.

Pour supprimer l'icône OneDrive - Personne dans l'explorateur de fichiers, voici comment faire :

  1. Lancez regedit.exe et accédez à l'emplacement suivant : hkey_current_user\software\microsoft\windows\currentversion\explorer\desktop\namespace
  2. Recherchez la sous-clé pour OneDrive personnel. Habituellement, il s'agit généralement de {018D5C66-4533-4307-9B53-224DE2ED1FE6}. Mais ça peut être différent).
  3. Accédez à l'emplacement suivant : hkey_classes_root\clsid et recherchez la clé qui correspond à OneDrive personnelle que vous avez trouvé à l'étape précédente.
  4. Dans la sous-clé system.ispinnedtonamespacetree, modifiez la date de valeur de 1 à 0.
  5. Enregistrez la modification et relancez l'explorateur de fichier. L'icone de raccourcis OneDrive à du disparaitre, sans on tue les tache explorer dans le gestionnaire de fichier et on le relance...

Enjoy ;-)

Faites vous entendre

Tout come lors des élections, ne vous abstenez pas et allez voter sur UserVoice pour que tous ces bricolages se fassent en un seul clic :

Sources

 

 

Télétravail, RDP & VPN

Par les temps qui courent, le télétravail est de mise, mais tout le monde n’est pas placé à la même enseigne. Il y a les grandes entreprises ou les cadres sont équipées d’ordinateurs portables et ou les infrastructures de sécurité existent et ou il suffit juste d’extrapoler pour les salariés qui ne sont pas équipés. Et puis il y a les petites entreprises, voire très petites ou rien n’existe et ou bien souvent le salarié sera contraint dans l'urgence de travailler sur son ordinateur personnel.

Et dans ce cas on peu se retrouver dans des situations très précaires, en termes de sécurité ou de praticité, car l’ordinateur familial est généralement utilisé par d’autres personnes, souvent les enfants, ce qui peut rapidement poser des problèmes. On pourrait bien sur isoler une session, mais c’est ingérable et par définition l’intervention sur le PC personnel que l'on réalise en avec une prise de contrôle à distance doit se limiter au strict minimum.

La solution bien souvent utilisée conste à permettre au télétravailleur de travailler distance en se connectant à son ordinateur de bureau, et ainsi conserver son environnement habituel. Pour ce faire on pense d’abord aux solutions de type AnyDesk, TeamViewer, voire VNC, solutions simples à mettre en œuvre mais qui offrent peu de confort à l’usage. La seule vraie solution confortable est d'utiliser le bureau à distance qui fonctionne avec le protocole RDP. Le problème du RDP c’est sa sécurisation car ce protocole directement exposé sur internet est une véritable passoire dont les méchants hackers sont friands si on se content de simples redirections de port. Microsoft ne s’est jamais occupé de ce problème pour cet usage, la seule solution proposée est RDS (Remote Desktop Services), une usine à gaz certes efficace mais totalement inadaptée aux TPE. Royal TS Gateway peut constituer une alternative (il y en a d’autres), mais pas pour de très petites entreprises qui n'ont que peux d'infra et généralement pas d'IT.

L’autre alternative reste l’utilisation d’un VPN en équipant les postes clients. Il y a plusieurs façons de faire, mais je voulais quelque chose de transparent, facilement administrable, ne m’imposant pas d’intervention ultérieure sur le poste client et ne nécessitant pas l’installation d’un serveur. Je vais donc une fois de plus utiliser Zerotier qui répond à mon besoin et qui est gratuit jusqu'à 50 clients.

  • Pas de serveur à déployer
  • Installation minimale sur le poste client
  • Gestion des ACL centralisée

Ce n’est pas la façon de faire la plus sécurisée (le port RDP est ouvert entre le client et son PC de bureau), mais on va limiter le risque avec un bon équilibre risque / coût / praticité.

Zerotier

Je vais faire l’impasse sur la mise en œuvre, j’en ai déjà parlé. Ici on va installer le client sur les deux postes à associer et leur figer une IP sur la console d’admin (Zerotier supporte Windows, MacOS, Linux et même Android et IOS). Ensuite on va s’assurer que seul le trafic RDP du poste client soit autorisé à se connecter au PC de bureau en utilisant les règles dans la console.

# Allow only IPv4, IPv4 ARP, and IPv6 Ethernet frames.
drop
	not ethertype ipv4
	and not ethertype arp
	and not ethertype ipv6
;
accept ipprotocol tcp and dport 443 or dport 80;

accept dport 3389 and ipsrc 10.147.1.20/32 and ipdest 10.147.1.30/32; # André
accept dport 3389 and ipsrc 10.147.1.21/32 and ipdest 10.147.1.31/32; # Carole
accept dport 3389 and ipsrc 10.147.1.23/32 and ipdest 10.147.1.33/32; # Bernard

drop chr tcp_syn and not chr tcp_ack; # No new TCP connections
;
# Drop TCP SYN,!ACK packets (new connections) not explicitly whitelisted above
break                     # break can be overridden by a capability
  chr tcp_syn             # TCP SYN (TCP flags will never match non-TCP packets)
  and not chr tcp_ack     # AND not TCP ACK
;
cap superuser
  id 2000 accept;
accept; # Accept what's left, returning RDP traffic

Coté poste au bureau on s'assure que le PC ne se met pas en veille (veille et verrouillage de l'écran uniquement) et on autorise RDP (le bureau à distance) sur le poste. Pour ça il faut un Windows Pro (mise à niveau à envisager parfois car les TPE qui vont acheter leur PC à la Fnac ou sur Amazon se retrouvent souvent avec une édition Famille de Windows).

Le client RDP

Do coté du poste client, après s'être assurée que la machine est à jour (on ne fait pas ça sur un vieux PC sous XP) et pas vérolée, il va nous falloir un client RDP et surtout interdire la mémorisation du mot de passe afin que n'importe qui ne puisse pas se connecter. Pour ça il y a une stratégie (Policie) à configurer ou une modification de registry, sauf que le PC personnel est une édition familiale il faudra ruser pour avoir accès aux stratégies...

Registry Hive HKEY_CURRENT_USER
Registry Path SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
Value Name DisablePasswordSaving
Value Type REG_DWORD
Enabled Value 1
Disabled Value 0

Tant sur Windows que sur Mac il existe plusieurs clients RDP proposés par Microsoft avec des possibilités inégales.

  • Client RDP de base Windows : Il supporte les redirections d'imprimantes, mais visiblement il est impossible malgré la stratégie d'interdire la mémorisation du mot de passe de session.
  • Client RDP enrichi que l'on peut télécharger sur le Windows Store pour Windows ou Apple Store MacOS : Il ne supporte pas la redirection des imprimantes, par contre il prend bien en compte la stratégie d'interdiction de mémorisation du mot de passe.

Tout ça se passe plutôt bien bien si le PC personnel est sous Windows, par contre si c'est un Mac vous imaginez bien que Microsoft ne s'est pas préoccupé du mappage du clavier qui est différent sur chez Apple. Et ça c'est juste insupportable à l'usage. Me voici contraint de chercher une alternative, alternative que je vais finalement utiliser sous Windows également car elle est plus sécurisée et bien plus fonctionnelle.

Royal TS/TSX

Royal TS (ou TSX sur Mac) est un client multi protocoles que j'utilise depuis des années pour gérer des douzaines de serveurs. Il inclus bien sur le RDP et une multitude d'options dont le mappage du clavier entre un Mac et un PC, la gestion des imprimantes et la possibilité de lancer des commandes avant et après une session. Et autre avantage il va être possible de chiffrer toutes les informations contenue dans ce client. De plus le fichier de configuration peut être partagé entre un PC et un Mac via un drive.

Royal TS/TSX n'est pas gratuit pour gérer une multitude de serveurs, mais cerise sur le gâteau il existe une version gratuite limitée à 10 connections. Juste ce dont on a besoin ici.

On installe sur le PC du salarié, on crée le profil (que l'on peut créer à l'avance) correspondant à son poste de travail avec l'option plein écran, on redirige les imprimantes et sur un Mac on gère le mappage. On n'hésite pas à enregistrer les identifiants car ici c'est le mot de passe de chiffrage de l'application qui sécurisera toutes les connections enregistrées.

A partir de là le salarié lance Royal TS/TSX, saisit le mot de passe de l'application et a accès à son PC de bureau. A noter qu'il est également possible de lui donner accès dans cette même application à d'autres environnements (RDP, VNC, SSH, PS, Terminal, ou des web apps sois IE ou Chromium). Et comme on peut batcher des process avant et après une ouverture de session on peut même imaginer de lancer et désactiver Zerotier avant et après.

Autre avantage de cette solution, il est possible de créer des fichiers de configuration chiffrés et facilement déployables (envoi par mail par exemple).

Voilà, ce n'est pas parfait, mais dans le contexte actuel rien n'est parfait. Et cette solution permettra le télétravail à peu de frais avec un minimum de sécurité et de confort.
 

Windows Terminal & SSH

Après nous avoir vanté pendant des décennies l'avantage d'un O/S Windows ou tout se passe en mode clic clic, force est de constater ces dernières années que le CLI revient en force, et ce notamment avec PowerShell. Et puis ces dernières années Microsoft nous a pondu Windows Terminal (ou mieux celle-ci) qui supporte bien sur PowerShell, Dos, mais également le client SSH maintenant intégré (timidement) à Windows.

Et c'est celui ci qui m'a intéressé pour remplacer mes anciens clients SSH (j'utilisait Putty ou Bitvise SSH) avec des mots de passe. Sauf que ce client SSH calqué sur ceux que l'on trouve sur Linux (OpenSSH) ne permet bien sur pas de stocker les mots de passe. Et c'est normal. Il va donc falloir apprendre à générer et utiliser des paires de clés SSH, ce qui avec ma culture Windows n'a pas été une mince affaire.

Si ce n'est pas fait on installe le client SSH après avoir installé Windows Terminal (le client SSH peut aussi fonctionner seul, et tout ce qui se rapporte ici à SSH n'est bien sur pas lié à Windows...).

PS C:\> Add-WindowsCapability -Online -Name OpenSSH.Client*

On va donc commencer par générer une paire de clés. Idéalement on se place dans le répertoire .ssh qui se trouve dans le répertoire utilisateur. Cela nous évitera d'avoir à saisir un chemin, car au final les clés devront se trouver dans se répertoire pour simplifier la suite. Il est possible de protéger les clés par une phrase de passe, ou pas.

PS C:\Users\Lionel> cd .ssh
PS C:\Users\Lionel\.ssh> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Lionel/.ssh/id_rsa): test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test.
Your public key has been saved in test.pub.
The key fingerprint is:
SHA256:vAwnkX2iNyxyqFBVnNVHpzPbdvy6g1VoE/RU8o7+hJ0 lionel@canaletto
The key's randomart image is:
+---[RSA 2048]----+
|    .o.o.. ...+ +|
|   .  oo  . .o.= |
|  .   o o ..+  oo|
| .   . = o   =++.|
|.   o * S   ..+o+|
| . . o B o   o.+o|
|  .     o    ooE+|
|            . .+ |
|              oo.|
+----[SHA256]-----+

On dispose maintenant de notre paire de clés, test qui est la clé privée et test.pub qui est la clé publique. Si je ne l'avais pas nommée ainsi on se serait retrouvé avec id_rsa et id_rsa.pub qui est le nom de la clé par défaut. Peu importe le nommage, ce qui compte c'est de bien identifier ces deux fichiers.

A partir de là il va falloir installer la clé publique sur le serveur de destination.

A ce stade il est donc nécessaire que le service SSH soit activé sur le serveur distant avec la possibilité de se connecter avec un mot de passe, voire en root (je sais c'est pas bien). Pour cela on édite le fichier qui va bien avec sudo nano /etc/ssh/sshd_config et on redémare le service :

On remplace PermitRootLogin prohibit-password par PermitRootLogin yes 
On remplace PasswordAuthentication no par PasswordAuthentication yes

A noter que quand on a installé une surcouche comme aaPanel, celui ci se charge du SSH au dessus de l'O/S, et on peut télécharger la clé privée à utiliser coté client directement depuis l'interface, et le cas échéant désactiver l'authentification par mot de passe. Inconvénient, pour l'instant aaPanel ne gère que le root qu'il convient donc de sécuriser.

Et c'est là que ça se complique, car si sous Linux il existe le petit outil idoine pour faire ça :

ssh-copy-id username@remote_host

Rien de tel sous Windows et il va falloir faire avec ce sont on dispose, donc le client SSH et voici la méthode que j'ai trouvée pour installer la clé publique sur le serveur :

PS C:\> cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Une confirmation sera demandée (pour ajouter ce nouveau host à la liste locale) ainsi que le mot de passe SSH du serveur distant. 

A ce stade il est possible de se connecter avec notre clé et il sera possible de désactiver (sans se précipiter) l'authentification par mot de passe en éditant le fichier sshd_config comme vu précédemment.

PS C:\> ssh [email protected]

Et si j'ai plusieurs clés destinées à plusieurs serveurs ?

C'est possible, de deux façons, la première en cli :

PS C:\> ssh -i ~/.ssh/ma_cle_perso [email protected]

Ou plus simplement :

PS C:\> ssh MonServeur

A condition d'avoir créé un fichier config dans /.ssh

Host MonServeur
  User root
  HostName 192.168.20.20
    Port 22
  IdentityFile ~/.ssh/ma_cle_perso

Alternativement je préfère cette méthode (ici)

c:\cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Intégration au menu Windows Terminal

Windows Terminal dispose d'un menu facilement paramétrable auquel on va pouvoir ajouter des raccourcis vers nos serveurs favoris. En cliquant sur paramètres on va directement ouvrir le fichier de paramètres et ajouter une entrée correspondant à un nouveau serveur SSH distant (attention le GUID doit être unique et on peut en générer sur plusieurs sites comme ici).

   {
     "guid":  "{232b7eac-3f44-4560-9250-eee6e97ca4e3}", // Random GUID
       "hidden":  false,
     "name":  "MonServeur",
  "icon":  "c:/users/lionel/pictures/terminal/ps.png", // facultatif
     "commandline":  "ssh 192.168.20.20"
   },

Ainsi il sera très facile d'accéder à un serveur. Dans ce fichier il est également possible de modifier tous les paramètres, mais pour ça je vous laisse lire les mes sources ci-dessous. Et comme il y a du Windows dans l'air, certains n'ont pas pu résister à ajouter des icones dans le terminal...

C'est bien sur anecdotique, mais je suis sur que ça va en amuser certains, voici la marche à suivre :

  1. On télécharge ces polices et on installe la police Caskaydia*
  2. Dans PowerShell on exécute Install-Module Terminal-Icons -Scope CurrentUser
  3. Toujours dans PS : code $profile, et on ajoute cette ligne Import-Module Terminal-Icons
  4. Avec RegEdit : Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont: 000=CaskaydiaCove Nerd Font
  5. Dans les paramètres de Windows Terminal on ajoute "fontFace": "CaskaydiaCove Nerd Font" dans profiles > defaults.

Bonus

Si vous êtes vraiment allergiques à Microsoft (que faites vous sous Windows), il y a une très bonne alternative, Fluent Terminal.

Voilà ! Je n'ai rien inventé et cet article a surtout pour but de me permettre de mémoriser tout ça. Et si ça peut vous aider.... Et si d'aucune ont quelque chose à y ajouter, n'hésitez pas !

Enjoy ;-)

Sources

 

Gérer ses VM Azure...

Ceci est un Notepad en évolution... Revenez...

Start / Stop

Un des intérêts d'une VM dans le cloud, c’est de n'en payer que l'usage. Pour la faire courte et pour donner suite à mon article sur les Bureaux à distance, je me suis retrouvé pour ce client avec VM qui n'était pas assez puissante. Sous Azure, c’est facile, en deux clics on change la taille de la VM, on choisit une instance avec plus de CPU, RAM, IO et bien sur le tarif augmente... Et si Azure est fonctionnellement remarquable, les tarifs sont purement stratosphériques si on les compare à une VM sur un serveur dédié chez Scaleway ou OVH (qu'il faudra bien sur géré, ce qui a aussi un coût et n’est pas faisable facilement par tout le monde). Bien sur ont peut facilement imaginer que les grand comptes obtiennent des remises tout aussi conséquents, sauf que pour une PME ça reste bien souvent inaccessible.

Vu que cette VM ne va être utilisée qu'aux heures de bureau, une façon de faire quelques économies va consister à programmer une heure de démarrage et une heure d'arrêt. Pour l’arrêt c’est facile, il suffit de configurer ça dans les paramètres de la VM. Mais allez donc savoir pourquoi il n'y a pas la même facilité pour la démarrer ? Chez Microsoft il appellent ça By Design. Il doit bien y avoir une raison puisque qu'il semblerait que ce soit à peu près le même fonctionnement chez les autres fournisseurs d'instances cloud et même chez OVH ou Scaleway. Bref, ce serait trop facile.

Il y plusieurs solution pour palier à ça !

Azure CLI

On peu bricoler quelque chose avec Azure CLI (Linux, Mac, Windows) et ainsi lancer un script qui va lancer ou stopper a VM. Pas très sexy ni trop sécurisé. 

Attention : Il ne faut pas se contenter d’arrêter la VM depuis l'O/S car si cela arrêtera bien la VM, elle continuera à être facturée, simple, mais sans intérêt. Pour qu'elle ne soit plus facturé il faut la désallouer (Deallocate) et ainsi seul le stockage continuera à être facturée.

Démarrer la VM

az vm start --name MyVM --resource-group MyVMGroup

Arrêter et désallouer

az vm stop --name MyVM --resource-group MyVMGroup
az vm deallocate --name MyVM --resource-group MyVMGroup

Il est également possible de faire ça en utilisant directement les ID des VM

az start --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"
az stop --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"
az deallocate --ids "/subscriptions/a35d316a-2a2a-48e2-8834-55481f7bbb48/resourceGroups/WIN16VM/providers/Microsoft.Compute/virtualMachines/Win16VM"

Azure Automation

Tout ça n'est pas très sexy ni user friendly. Une autre façon de faire va consister pour l'administrateur de programmer le démarrage de la VM et son arrêt en considérant que l'utilisateur s'en servira à heures fixes. Pour l’arrêt on va se servir de la fonction intégrée car elle est capable de base d'envoyer un mail à l’utilisateur lui proposant d'outrepasser l’arrêt programmé sans avoir à se connecter. Pratique.

Pour le démarrage par contre ça va être un peu plus compliqué. On va commencer par créer un compte Automation, simplement en cherchant dans la barre de recherche. Comme tout sur Azure, ce service est également payant, mais dans sa grande bonté Microsoft nous offre (jusqu'à quand ?) un petit forfait gratuit tous les mois qui sera amplement suffisant pour ce qu'on va faire.

Une fois dans notre compte Automation on va créer un Runbook, on lui donne un nom et on choisit un Flux de travail PowerShell (PowerShell Workflow) et on le crée. Une fois créé on va aller l'éditer

workflow Start-Ma-VM
{
# Association to the Azure subscribtion
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# Start the virtual machine
Start-AzureRMVM -ResourceGroupName "MonGroupeDeRessources" -Name "MaVM"
}

Il ne reste plus qu'à aller dans le menu Planifications et d'en ajouter une en configurant l'heure de démarrage et la récurrence, sans oublier de choisir le bon fuseau horaire. Si on veut envoyer une notification par un mail ou faire autre chose il est bien sur possible de le faire dans le script.

A ce stade ça reste toutefois limité, la VM va démarrer tous les jours, même quand personne ne travaille.

Heureusement il est également possible de créer un WebHook et ainsi démarrer la VM depuis une URL. Ici depuis PowerShell mais on peut tout à fait imaginer intégrer ça dans un portail intranet ou un simple raccourcis sur le poste de l'utilisateur... Ou mieux utiliser un planificateur évolué tenant compte des jours fériés et des week-ends, voire interagir avec un agenda Google ou Microsoft 365...

PS C:\Users\Lionel> Invoke-WebRequest -Uri https://6bc1fsdfs-aesdf4c2f-8d31dsfsdf7fsd5f.webhook.we.azure-automation.net/webhooks?token=ZHuMYFqgqgfqsqgdgB%2qsdgfqsdgjc%3d -Method POST

Alternatives

Si la lecture de la documentation n'est pas toujours très lisibles, il faut bien admettre qu'Azure est très complet. Et si cela ne vous suffit pas il existe des fournisseurs de service qui se sont spécialisés dans la planification des VM et plus globalement vous aideront à réduire les coûts du cloud, que ce soit sur Azure, AWS ou GoogleCloud. Je pense par exemple à ParkMyCloud ou MyCloudToolbox, mais il y en d'autres. Se posera alors la question de la confiance que vous accorderez à ces services.

L'accès des clients aux VM

Comme on l'a vu le plus simple consiste à utiliser le client d'accès à distance. Le protocole RDP n'étant pas franchement des plus sur. Sécuriser RDP imposerait de passer par des certificats et une passerelle complexe et coûteuse ou par une alternative non Microsoft du genre Royal TS Server. La logique impose de passer par un VPN. Azure propose bien entendu tout une panoplie de solutions de sécurité, n'ayant ni envie de passer à la caisse ni celle de me compliquer la vie pour ce type d'utilisation, je vais simplement utiliser ZeroTier. C'est plus un SDN qu'un VPN, c'est OpenSource et gratuit et ça fait parfaitement le travail (j'en avais déjà parlé et on trouve maintenant une multitude d'articles).

On donnera une IP fixe au serveur et tous les clients autorisés pourront accéder au serveur RDP. Ensuite on prendra soin de ne plus autoriser l'accès via l'IP externe Azure ou de forcer un ACL sur une IP cliente sure. Easy, d'autant plus que mon client utilise déja cette solution pour sécuriser l'accès à des ressources SMB distantes.

Scénario pratique....

Sur le poste de on prépare un script PowerShell qui va lancer le WebHook pour démarrer la VM Azure, attendre que le serveur soit lancé, tester le port RDP et lancer le Bureau à distance, et au passage notifier un IT si quelque chose se passe mal. S'il doit y revenir dans la journée il ne lancera que le client RDP (Bureau à distance), en fin de journée le serveur sera programmé pour s’arrêter tout seul et si l’utilisateur veut faire des heures supplémentaires il n'aura qu'à cliquer dans le mail reçu pour reprogrammer l’arrêt...

On commence par brouiller à minima le mot de passe du mail...

"P4ssww0rd!" | Convertto-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-file C:\Users\User1\admin.txt

Et ensuite on prépare un petit script qui se lancera depuis un raccourcis sur le bureau...

$password = Get-Content C:\Users\User1\admin.txt | Convertto-SecureString # On récupère le mot de passe encrypté dans un fichier...
$username = "[email protected]"
$From = "[email protected]"
$To = "user@prestataire"
$SMTPServer = "mail.gandi.net"
$SMTPPort = 587
$subject = "Client : Utilisateur (Machine)"
$Credential = New-Object System.Management.Automation.PSCredential ($username, $password)

try {
    $response = Invoke-WebRequest -Uri https://6bcghgdfh-afgh-4ghgfdf-8ghfgdh5f.webhook.we.azure-automation.net/webhooks?token=ZHuMYFshghshhh5+fgshs+f5h5+65sh -Method POST
    if($response.StatusCode -eq 202) {
        Write-Host "waiting..."
        sleep 60   # Temps d’attente estimé pour le démarrage de la VM
        if (Test-NetConnection 10.17.22.15 -Port 3389 | ? { $_.TcpTestSucceeded } ) {
            C:\Users\User1\vm.rdp  # On lance le client RDP
        } else {
            cls
	    Write-Output "RDP 1" # Si test NetConnection échoue (pas de réponse)
            Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur NetConnection Fail' -Credential $Credential  -Port $SMTPPort -UseSsl
	    sleep 15
        }
    } else {
        cls
	Write-Output "Erreur RDP (l'administrateur a recu un mail d'avertissement et va intervenir !)" # Si NetConnection code autre que 202
        Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur NetConnection 40x ou 500x' -Credential $Credential  -Port $SMTPPort -UseSsl
	sleep 15
    }
} catch {
    cls
    Write-Output "Erreur VM (l'administrateur a recu un mail d'avertissement et va intervenir !)" # Erreur NetConnection code 40x ou 50x
    Send-MailMessage -To $To -From $From -Subject $subject -SmtpServer $SMTPServer -Body 'Erreur au lancement de la VM' -Credential $Credential  -Port $SMTPPort -UseSsl
    sleep 15
}

Ainsi, contrairement à une planification en début de journée, la VM ne sera lancée que quand l'utilisateur en a l'usage afin d'économiser sur la facture Azure. Au besoin on peut également faire un petit script pour l'éteindre.

Migration

Dans un autre contexte je dois migrer une VM Azure vers ESXi. Expérience à venir.

Sources

 

Windows 10 au long cours....

Suite à ma migration tardive vers Windows 10 je continue à éplucher les problèmes que je n'avais pas sous Windows 7 et qui me donnent ce sentiment de régression, là ou la tech est censée apporter plus de progrès. Je reviendrais vous parler de la gestion calamiteuse de mes écrans, mais ce dossier est loin d'être clos !

Un autre problème est la gestion de la mémoire.

Je fais partie de ces personnes qui n'éteignent jamais leur PC, je sais ce n'est pas très écolo, on ne peut pas l'être sur tout. Bref, là ou j'avais dressé mon Windows 7 à tenir des mois sans redémarrage, avec une stabilité déconcertante (à condition d'éviter certaines mises à jour destinées à le tuer), force est de constater que je suis obligé de redémarrer mon Windows 10 régulièrement car il devient inutilisable au bout d'une semaine...

J'ai alors ouvert une enquête, inutile bien sur de faire appel au support, sur les forums les agents mandatés par Microsoft ne savent que conseiller un redémarrage, voire une réinstallation, sérieux !

Dans les faits le processus System occupe de plus en plus la CPU, environ 1 à 2 % de plus par jour. En allant chercher des détails avec Process Explorer, je me suis rendu compte que mon PC passait son temps à compresser la mémoire. Il se trouve que j'ai 32 GO de RAM et qu'il en reste toujours au moins 1/3 de libre, je considère donc que cette option est inutile et contre productive.

Dans la pratique ça peut s'expliquer. Microsoft force tout le monde à migrer vers Windows 10, mais W10 consomme plus de CPU et pour ceux ceux qui migrent de vieux PC avec 2 ou 4 GO de RAM, heureusement qu'il existe quelques artifices, même s'il me semblent illusoires ! Il ne faut pas non plus oublier que Windows 10 n'est jamais que le résultat du tripatouillage d'un code hérité au fil des décennies, ainsi des artifices utiles avec un PC des années 90 et son disque dur lent sont inutile avec un PC actuel pourvut d'un SSD, pourtant des réglages persistent !  Et de toutes façons la majorité des utilisateurs allument leur PC, puis l'éteignent quand ils ne l'utilisent plus. Donc leur PC est à nouveau frais et dispo le lendemain...

Utilisant par ailleurs des serveurs, ça m'a poussé à regarder si le problème constaté sous Windows 10 est présent sous Windows Server 2016/2019, et la réponse est non. En effet le code est proche, mais les réglages différents. Je n'ai pas ce problème sur les versions serveur, on peu penser que l'éditeur considère que sur un serveur l'administrateur dimensionne les ressources en fonction des besoins et que ces artifices sont inutiles. Pour vérifier ce point il existe une commande PowerShell :

Résultat sous Windows 10

PS C:\WINDOWS\system32> get-mmagent
ApplicationLaunchPrefetching : True
ApplicationPreLaunch : True
MaxOperationAPIFiles : 256
MemoryCompression : True
OperationAPI : True
PageCombining : True

Résultat sous Windows Server 2016/2019

PS C:\Users\Administrator> get-mmagent
ApplicationLaunchPrefetching : False
ApplicationPreLaunch : False
MaxOperationAPIFiles : 256
MemoryCompression : False
OperationAPI : False
PageCombining : False

Inutile d'être un expert pour constater des réglage bien différents de la gestion et l'inutilisation de la mémoire. On va donc changer quelques réglages, tout ceci n'étant pas sans risque, si vous ne savez pas ce que vous faites, je vous conseille d'aller jouer ailleurs ou de faire appel à un expert.

On va commencer par désactiver la compression mémoire et redémarrer :

PS C:\Windows\system32> disable-mmagent -mc
PS C:\Windows\system32> Restart-Computer

Etant donné qu'il ne sera pas possible d'apprécier immédiatement le résultat je propose de désactiver également Prefetch et SuperFetch avec regedit (on désactive  EnablePrefetcher et EnableSuperfetch, (au besoin on crée les entrée si elles ne sont pas présentes)

HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control>Session Manager>Memory Management>PrefetchParameters
  • 0 = Désactivé
  • 1 = Actif sur les applications
  • 2 = Actif au démarrage
  • 3 = Actif sur tout

Et on termine en désactivant les services associés (SysMain, ou SuperFetch sur des versions antérieures) avec le gestionnaire des services (WIN+R + services.msc), ou en PowerShell si vous y êtes plus à l'aise :

PS C:\Windows\system32> Set-Service SysMain -StartupType Disabled

Après un redémarrage on obtient :

PS C:\Windows\system32> Get-mmagent
ApplicationLaunchPrefetching : False
ApplicationPreLaunch : False
MaxOperationAPIFiles : 256
MemoryCompression : False
OperationAPI : False
PageCombining : False

 

Je touche du bois car mon PC est beaucoup plus stable depuis une semaine, j'espère que ça va durer et qu'une nouvelle mise à jour ne va pas me contrarier !

EDIT Avril 2020 : deux mois après je constate que oui le PC est bien plus stable, mais si je n'ai plus de processus qui me bouffe la CPU, Windows gère toujours très mal la RAM et j'ai beau fermer toutes les applications gourmandes, je me retrouve au mieux avec 16 GO sur 32... Mais il parait que c'est normal, que j'utilise mal mon ordi et qu'il faut le redémarrer. Je tenterais bien un Mac équivalent, mais quand je vois le comportement de mon Mac Book Pro qui souffle comme un âne dès que je lance une vidéo et deux trois sites, j'hésite à confier mes économie à Apple !

EDIT Juin 2020 : Après la mise à jour 2004, surprise, toutes ces customisations sont remises à leur valeur initiale.

Sources

C'était mieux avant...

Alors voilà, je bosse depuis une douzaine d’année sur le même PC, un HP i7 alors un peu haut de gamme, sous Windows 7. Au fil des années je lui ai donné un peu de mémoire (16 GO) et j’ai remplacé le disque par un SSD. Le Windows 7 est d’origine avec un nombre incalculable d’installations de logiciels et d’utilitaires à tester, et la particularité est que je ne le redémarrais jamais, en dehors de quelques coupures électrique, et il y a bien longtemps que j’avais désactivé les mises à jour visant à le pousser vers la sortie ! Bref, la robustesse même d’un bon PC avec un O/S éprouvé.

Lors de la dernière coupure électrique j’ai toutefois remarqué qu'il avait mis un peu de temps à redémarrer, et même qu’il voulait chercher des secteurs défectueux, je ne l’ai pas fait et il a fini par redémarrer, c’était au début de l’été je crois.

Je me suis tout de même dit qu’il serait temps de faire quelque chose avant de me retrouver vraiment en rade. Au début je voulais le remplacer par un NUC. Mais un NUC un peu sérieux sur lequel je pourrais raccorder au moins trois écrans va chercher dans les 1500 €, voire plus. Alors je me suis dit, pourquoi ne pas faire comme pour les serveurs et regarder le marché de l’occasion chez les brookers. Les maîtres en la matière sont les allemands. Ils rachètent des lots aux grandes entreprises, ils révisent, polissent et finissent par vous livrer une machine comme neuve ! Et c’est ainsi que je me suis offert une Workstation HP Z230SF avec un Xeon E3-1245v3 (au moins aussi puissant que les i7 des NUC), un SSD pour Windows et un disque dur parce-que le brooker ne doit pas aimer laisser des emplacements vides… Ah j’oubliais surtout 32 GO de mémoire, le tout pour 380 € TTC !

Pas besoin d’installer Windows, la version Pro est une vraie version OEM, et surtout la dernière build ce qui m’évite les fastidieuses heures de mise à jour. Windows 10 je connais car même si j’ai longtemps boudé sur mon PC principal j’en ai sur des laptops ou des VM chez moi ou sur Azure. Il n’y a pas que du bon, loin de la, mais on ne peut pas rester indéfiniment sur un O/S vintage, et puis avec le temps Windows 10 commence à se stabiliser, au moins quand les développeurs de chez Microsoft ne se prennent pas une murge la veille du lancement d’une mise à jour importante. La dernière à du être sérieuse (je parle de la murge) car je me suis retrouvé avec des mises à jour appliquées d’office et surtout avec l’antivirus désactivé au redémarrage. Bref, tout va bien du côté de Redmond…

Mais ce n’est pas pour vous narrer ma life que j’ai voulu écrire ce billet, mais pour vous explique un problème que vous pourriez bien rencontrer, si ce n’est pas déjà fait !

Sous Windows 7 j’avais trois écrans HD, un en VGA, un autre en DVI et un troisième en USB via un adaptateur. Je l’avais oublié celui-là, et entre temps j’aurais pu le raccorder sur le port HDMI de la carte graphique de que j’avais dû remplacer (les constructeurs installent des cartes graphiques avec ventilateur, inutile en bureautique, le ventilateur lâche au bout de 3 ans et on doit changer la carte graphique, un classique de l’obsolescence programmée, alors qu’une carte fanless fait parfaitement l’affaire en bureautique).

Su ma nouvelle machine j’ai trois sorties Display Port. J’ai donc acheté 2 câbles DP vers DVI pour deux de mes écrans et je me suis offert un écran UHD pas trop cher (Samsung U28E590D) pour mettre au centre, et qui dispose lui d’une entrée Display Port. Je raccorde le tout et tout fonctionne merveilleusement. Edge me permet de rapidement installer Chrome et ainsi d’installer les applications qui me seront utile. Bon, je suis mauvaise langue, Microsoft s’est enfin décidé à copier Google et la RC du nouveau Edge Chromium fonctionne très bien, à la différence que ce n’est plus Google qui vous espionnera mais Microsoft, pas sur que ça change grand-chose si ce nouvel Edge se popularise… J’évite d’installer trop de choses car j’ai pris soin de virtualiser mon ancien Windows 7 sur mon ESXi et je pourrais ainsi y retrouver les petits utilitaires que j’utilise une ou deux fois par an.

Le hic !

Alors vous devez vous dire, tout ce bla bla pour vous dire que j’ai un nouveau PC ? Hélas il y a un problème ! En effet, le petit matin qui suit le grand soir, lendemain de la première nuit avec lui (comme dirait Bénabar), j’ai eu la surprise de retrouver toutes les fenêtres que j’avais méticuleusement ordonnées, ramassées, tapies au coin de l’écran de droite. C’est très désagréable sur ce genre de config ou tout à sa place. Après quelques tests et mises à jour de pilotes, je me suis rapidement aperçu que c’était la mise en veille ou l’extinction des écrans qui provoquait ça, en effet Alexa les éteint pour économiser quand je lui souhaite une bonne nuit…

Je suis donc parti pour une longue nuit à l’exploration des forums afin de trouver une solution. A la surface du net, Microsoft conseille comme d’habitude de mettre à jour les pilotes, de réinstaller Windows ou d’autres conseils du même acabit. Bien sûr, continuez à prendre les gens pour des ânes ! En cherchant un peu on s’aperçoit qu’il y a bien un problème, mais que c’est By Design, comme ils disent. Et surtout je me suis aperçu que je suis loin d’être le seul concerné, quelque part ça me rassure !

Explications

Un écran Display Port (ou HDMI) est un peu moins bête que nos bons vieux VGA. Il communique avec le PC via la carte graphique. Windows lui demande de se mettre en veille, il se met en veille et puis il s’éteint. Et sur ce type d’écran si l’écran est éteint, Windows considère tout bonnement qu’il n’est plus présent, donc il agit comme s’il avait été débranché et il déplace les fenêtres de cet écran sur un écran qui lui est présent, même éteint car connecté en VGA ou DVI, Windows ignore son état. Je schématise un peu, tout cela est géré par les protocoles DDC/CI et l’EDID (voir les liens en bas pour les curieux).

Alors vous allez me dire qu’il doit bien exister une clé de registre pour palier à cet inconvénient ? Et bien non, en fait il y en avait une sous Windows 7 et la première version de Windows 10, mais depuis elle a été supprimée, Microsoft (et l’industrie qui va avec) considérant surement qu’il n’y avait plus sur terre d’écrans VGA ou DVI et que tout le monde disposait d’écrans DP ou HDMI, auquel cas ce problème n’existerait pas car tous les écrans sont alors absents et il n'y a pas lieu de déplacer les fenêtres.

On retrouve ce problème dans des configurations différentes, par exemple ceux qui utilisent un TV connecté au PC et l’éteignent quand ils ne regardent plus de films, le Player rejoint alors l’écran principal. Ou la situation ou on connecte un vidéo projecteur le temps d’une présentation et ou PowerPoint rejoint l’écran du laptop quand on débranche le projecteur. Mais dans ces cas ça a du sens ! Ce qui est rageant c’est que Microsoft ne laisse pas le choix, fusse t'il via une position de registre pour ceux qui osent RegEdit.

On pourrait également penser que cela puisse se passer au niveau du driver, et ce serait assez logique. En gros aujourd’hui de ce côté là on a NVidia, AMD et Intel. Sur les NVidia Quatro (des cartes pro) il y a une astuce, attention, pas une fonctionnalité mais juste une astuce qui peut disparaître lors de la mise à jour suivante. Mauvaise note également pour Samsung qui sur ce modèle ne prévoit pas la désactivation DDC/CI, certains écrans Dell le permettent.

Me voici donc condamné à travailler avec un seul écran ou à renouveler tous mes écrans. Quand je disais à mon comptable que j’aurais du prendre un 8K de 95 pouces… Ce n’est pas une solution, et je préfère travailler avec plusieurs écrans, un principal en 28" UHD, un 24" HD à droite qui me sert principalement pour des connections à des dizaines de sessions RDP sur des serveurs distants, et un autre 24" à gauche dédié aux divers moyens de communication (WA, Messenger, Slack, Hangouts, etc…). C’est ainsi, à mon âge je ne vais pas changer mes habitudes, déjà qu’il faut manger bio se sentir responsable de la planète ! Et je n’ai aucune envie de me plier à un quelconque dictat. Et pour ceux, oui je l’attendais celle-ci, qui me diront que je devrais passer sous Mac, sachez que j’ai aussi un Mac et que le problème est exactement identique.

Contournement

Puisque j'ai vu sur des centaines de posts sur de forums ou des sites qu’il n’y a pas de solution simple et efficace, je vais essayer de contourner ce dysfonctionnement. Après tout je ne demande pas la Lune, je ne cherche qu’à retrouver la disposition de mon espace de travail au réveil !

Je me suis d’abord dit qu’il devait exister des utilitaires permettant de retrouver une disposition précise, ou mieux la dernière disposition, après une mise en veille. Certains le promettent comme DisplayFusion dans sa version payante, hélas promesse non tenue, et c’est même pire, il mélange tout ! D’autres, gratuits, semblent faire mieux mais sont statiques et datent de Windows XP. Je me suis épuisé à chercher et je n’ai rien trouvé de satisfaisant, de plus quand l’écran Display Port se rallume, Windows effectue le processus de reconnaissance Plug&Play, ce qui n’est pas instantané. En listant certains forums j’ai également vu des utilisateurs excédés couper ou isoler des broches sur les connecteurs HDMI, solution pas totalement satisfaisante car du coup l’écran ne se mettra pas en veille.

Il existe bien une solution, mais elle consiste à sortir le fer à souder, c’est l’affaire d’une paire de résistances à deux centimes. Et comme toujours en pareille situations il y a ceux qui ont décidé de rentabiliser leur fer à souder. Ainsi il existe deux solutions clé en main, l’une en HDMI sur un site qui n’inspire pas vraiment confiance, mais ses adaptateurs son bien livrés et fonctionnent à ce que j’ai pu lire sur des forums, l’autre solution vient du Japon, elle est dédiée au Display Port, son auteur prend soin d’expliquer que ça ne fonctionne pas toujours… Tant pis, je suis joueur et pour 47 € je viens de passer commande… Je reviendrais vous en parler ici…

EDIT 07/11/2019 : J’ai reçu l’adaptateur DPHPDMA. En fait il y a deux modèles, le plus simple est censé fonctionner tout seul en Fake mode, mais dans mon cas ça n’a rien changé. Heureusement il y a un jumper pour forcer le Fake mode. En fait de jumper il s’agit ici de faire une microscopique soudure après avoir démonté l’adaptateur. Je ne suis pas équipé pour ce genre de soudure sur CI, j’ai tenté le coup avec mon fer à souder d’électricien, par chance ça n’a rien brûlé et ça fonctionne. Alexa peut éteindre mes écrans quand je vais me coucher sans risque de tout retrouver en vrac le lendemain.

Le second modèle, outre qu’il dispose d’un cavalier afin d’éviter toute soudure hasardeuse, dispose également d’un lien USB qui permettra de gérer les modes directement depuis Windows. Il n’en reste pas moins que ça fait beaucoup et cher pour une fonctionnalité arbitrairement retirée de Windows.

Autre chose...

En fait il y a un autre paramètre à prendre en compte car ça peut être gênant à l’usage. Sur un UHD de 28" on utilise une mise à l'échelle de 150% sans quoi c’est vraiment trop petit. Par contre sur le HD qui est à coté en 24" on conserve le ratio standard à 100%. Et quand on fait glisser une fenêtre d’un écran à un autre, Windows il la resize à la volée, d’une part c’est visuellement désagréable et d’autre part ça plante quand on le fait plusieurs fois sur la même fenêtre...

Donc pour faire cohabiter un écran UHD avec des écrans HD de 24" il faut dans l’absolu que le UHD fasse 42" afin de pouvoir utiliser une mise à l'échelle standard de 100%, dans mon cas ça s'est terminé avec un 32" et une mise à l’échelle à 125%.

Windows 10

Et sinon, ça fait quoi de passer de Windows 10 après avoir résisté tout ce temps ?

Bof, à une époque où tout se passe de plus en plus dans un navigateur, L’O/S a-t-il encore une grande importance ? Pour preuve, j’ai envoyé à ma fille un vieux ChromeBook pour remplacer son MacBook Pro le temps d’une réparation (250 € mais on n’a pas su me dire quoi), bref au-delà de son profond attachement à son MacBook (merci le Marketing Apple), elle ne m’a exprimé aucune gêne liée à l'usage du ChromeBook pour son travail à la fac. Seul hic, Netflix ne se lance pas sur ce vieux ChromeBook, mais il a cinq ans…

Tout ça pour dire qu’en ce qui me concerne Windows 10 ne m’apporte pas grand-chose, je pourrais en dire plus quand j’aurais réglé ce problème d’écran. Pour l’instant je le sens bien plus gourmand. Par exemple, outre Outlook, Slack, Opera pour WA, Telegram et Messenger, pas mal d’utilitaires chargés, deux OneDrive et Google Drive, j’ai en permanence 256 onglets dans Chrome (impossible avec d’autres navigateurs), ceci était contenu sous Windows 7 dans mes 16 GO de mémoire, là j’arrive aisément à 24 GO sous Windows 10 alors que j’ai surement moins de choses qui tournent en tache de fond… Donc quand il se dit que Windows 10 est moins gourmand c’est un leurre, d’ailleurs il ne se vend plus de laptops au-dessous de de 8 GO de mémoire à ce que je sache… Bref, Windows 10 c’est l’industrie en marche, mais les utilisateurs ont des habitudes, cela profite à Microsoft, il n’y a qu’à voir Office que tout le monde réclame pour envoyer trois courriers et faire quatre additions. Je pense sincèrement que l’avenir pour les utilisateurs lambda est un Chromebook, peut être que Microsoft le comprendra et sortira son équivalemment, je pense même qu’ils y travaillent… En plus ça ne plante pas, car il n’y a rien dedans, tout étant dans le cloud…

Windows 10 c’est aussi la plaie des mises à jour. Il faut donc rapidement installer ce petit utilitaire si on ne veut pas être emmerdé. Oui j’ai bien dit emmerdé car je veux pouvoir décider quand je vais consacrer du temps à installer des mises à jour et pas que Microsoft me l’impose (même combat sous Windows Serveur 2016/2019, mais là il y a une alternative car on passe de plus en plus de serveurs sous Linux, d’ailleurs en parlant de Linux, je vous parlerai un jour de mon expérience plutôt positive avec Ubuntu / KDE / Plasma).

Bonus : Gadgets

Sous Windows 7 nous avions les Gadgets de bureau, parfois gadget mais parfois très utiles comme par exemple pour pouvoir surveiller d’un œil des processus ou des liaisons (SNMP, VPN, services). Microsoft ayant décidé que nous n’en avons plus besoin (sous l'ovni Windows 8 je crois ou ça faisait tache avec les tuiles), des développeurs indépendants se sont hâtés de rendre ça disponible sous Windows 10. Il faut bien le dire, si ça fonctionne bien, le design vintage fait un peu tache sous Windows 10. Heureusement il y a d’autres développeurs qui on produit Rainmetter (1). Ca ne date pas d’hier mais aujourd’hui le projet est bien aboutit et le design est magnifique. Donc si les gadgets vous manquent, je recommande !

Bonus : mes petits outils du quotidien...

Bonus : Windows Defender

Si vous trouvez que Windows Defender prend trop ses aises, restreignez le avec cette commande PowerShell (Microsoft vous donne les explications ici ). 

Set-MpPreference -ScanAvgCPULoadFactor 25

Et à moins que vous ne passiez votre temps dans les coins sombres du net, évitez les outils de sécurité tiers, pour le coup celui qui est intégré à Windows fait bien son job. Désinstallez également tous les crapwares livrés avec votre nouveau PC, deux antivirus c'est contre productif. Et si vous pensez vraiment qu'il vous faut une meilleure protection, vous n'avez pas besoin de mes conseils et ce n'est pas avec des solutions grand public que vous vous bâtirez vos défenses....

Sources