La commande :
Bloc de code:
sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array nomducompte
opère une édition du fichier de préférence
com.apple.loginwindow.plist (localisé dans le sous-dossier
Preferences de la
Bibliothèque Générale de l'OS =
/Library).
Le
LoginWindow est le processus gestionnaire de l'écran de connexion (
login ou ouverture de session). Cet écran est affiché (lorsque le chiffrement «
FileVault» n'est pas activé) tout à la fin du chargement du Système. En vue de l'affichage de cet écran de connexion > le processus
LoginWindow consulte son fichier de préférences et hop ! doit masquer l'utilisateur s'il y a en a un de mentionné comme devant être masqué.
Tu noteras que dans ta commande --> c'est l'utilitaire
defaults qui est appelé (c'est l'utilitaire en charge de l'édition des fichiers de préférences de type
.plist) > avec le verbe
write (écrire = éditer une préférence) > l'adresse du fichier-cible (
com.apple.loginwindow ici) > et le paramétrage à inscrire.
Dans un fichier de type
plist > un paramétrage déterminé se compose d'une paire rédigée en mode superposé =
clé >
chaîne.
- une clé (= key) désigne le type de paramètre par son nom agglutiné --> dans ton exemple, la clé = HiddenUsersList (liste des Utilisateurs Cachés)
- une chaîne (= string) est la valeur associée au paramètre de la clé --> dans ton exemple, la valeur de la chaîne est le nomdecompte de l'utilisateur bénéficiaire du masquage, brol dans mon exemple.
Mais (vas-tu me dire) --> je lis
-array comme désignation pour la valeur associée à la
clé > au lieu de
-string. La raison en est la petite complication suivante --> il arrive que pour un paramètre donné (
clé) > une cascade de valeurs de
chaînes puisse être associée (par exemple ici plusieurs
nomsdecomptes d'utilisateurs à masquer). Dans un pareil cas de figure > la cascade des
chaînes de valeurs associées à une
clé > se trouve encadrée dans un
tableau (=
array).
La syntaxe d'un tel paramètre dans le fichier
com.apple.loginwindow.plist correspond donc à ceci :
Bloc de code:
<key>HiddenUsersList</key>
<array>
<string>brol</string>
</array>
où tu discernes que la ligne supérieure de la
clé s'écrit toujours ainsi -->
<key>-----</key>
(le titre du paramètre encadré par
<key> (en ouverture) et
</key> (en fermeture) ;
que
<array>
-----
</array>
constituent les indicateurs d'ouverture (
<array>) et de fermeture (
</array>) du
tableau des
chaînes de valeurs associées à la
clé
que
<string>brol</string>
constitue ici la seule
chaîne de valeur incluse dans le
tableau --> le
nomdecompte brol se trouvant encadré par
<string> (en ouverture) et
</string> (en fermeture).
=> si tu as compris cette logique d'écriture > tu as compris la syntaxe universelle valable pour tout fichier
plist dans
macOS. Il faut noter que la moindre erreur (la plus minuscule erreur) d'écriture, par exemple écrire
</string en fermeture d'une chaîne en oubliant le
> final --> invalide instantanément le fichier
plist entier > et par là plante le processus qui s'y réfère. Pas forcément instantanément (car le processus peut se référer à une mise en cache de la préférence) > mais nécessairement au reloggement de session après déloggement ou encore au re-démarrage.
C'est pourquoi il est hautement déconseillé d'éditer
à la main un fichier
plist > mais qu'il vaut mieux passer des commandes dans le «
Terminal» utilisant les 2 utilitaires spécialisés à cette fin :
defaults et
PlistBuddy (qui est un utilitaire d'édition plus pointu que
defaults qui est en somme l'éditeur générique).
----------
La commande que je t'ai passée :
Bloc de code:
sudo dscl . create /Users/brol IsHidden 1
opère la même action de masquage d'utilisateur à l'écran de connexion > mais n'édite pas le fichier de préférences du
LoginWindow > mais ce qu'on peut appeler la
Carte-d'Identité de l'utilisateur.
Un utilisateur dans l'OS est l'association d'une
Identité Logique et d'un
dossier de compte. L'
Identité Logique est consignée dans un fichier de type
brol.plist à l'adresse précise suivante :
/private/var/db/dslocal/nodes/Default/users/ brol.plist (le sous-dossier
users en bout de chemin est la base de données des utilisateurs dans l'OS). Cette base de données est gérée par le
Service d'Annuaire (dit :
Open Directory). Pour éditer les paramètres d'une
Carte-d'Identité d'utilisateur (un fichier de type
brol.plist) > l'utilitaire conseillé (disons) est
dscl (
directory_service_command_line _utility : utilitaire du service d'annuaire exécutable en ligne de commande).
La syntaxe de l'utilitaire
dscl est analogue à celle de
defaults. Dans l'exemple de commande > tu vois que
dscl est appelé > avec un
. chargé d'indiquer qu'il s'agit du domaine d'hôte local > le verbe
create (équivalent de
write pour
defaults) > l'adresse super-abrégée au fichier carte d'identité =
/Users/brol (abrégé de :
/private/var/db/dslocal/nodes/ Default/users/brol.plist qu'il ne faut surtout pas confondre avec l'adresse au dossier de compte
/Users/brol dont il n'est absolument pas question ici malgré les apparences) > la mention de la
clé =
IsHidden > et la valeur de
chaîne associée =
1 (synonyme de
TRUE =
VRAI).
Voici le dispositif syntaxique :
Bloc de code:
<key>isHidden</key>
<array>
<string>1</string>
</array>
=> tu noteras qu'il est strictement conforme à la syntaxe :
clé > [
tableau]
chaîne d'un fichier
plist. Bien sûr > on pourrait utiliser
defaults ou
PlistBuddy pour éditer ce type de fichier
plist > mais "ça craint" un maximum pour un fichier "
Carte d'Identité" d'utilisateur si on se loupe. C'est pourquoi
dscl est plutôt conseillé dans ce cas > mais son usage est assez obscur (il faut bien le dire).
En cas donc d'édition intrinsèque du fichier
Carte-d'Identité d'utilisateur > le processus
LoginWindow tient compte du paramètrage
interne à la
Carte-d'Identité d'utilisateur > au lieu de prendre le paramétrage
externe (qui est son propre fichier de préférence de service).
[Pour avoir un aperçu du fichier
Carte-d'Identité d'un utilisateur > et modifier des valeurs de paramètres en mode
graphique > voici le truc : tu ouvres le panneau
Utilisateurs et groupes des
Préférences Système > tu déverrouilles le panneau > tu cliques le nom d'un utilisateur dans la colonne de gauche tout en pressant la touche
ctrl (control) > ce qui affiche un bouton
Options avancées... à côté du nom de l'utilisateur cible => presser ce bouton affiche un panneau qui est une vue abrégée du fichier
Carte-d'Identité (
brol.plist dans mon exemple) sans la complexité syntaxique des
clés >
tableaux >
chaînes.]
----------
Pour ce qui est de
cacher le dossier de compte (
sans le déplacer) > mettre un
. devant le nom du dossier de départ dans le répertoire des
Utilisateurs (ce qui donnerait dans mon exemple un chemin :
/Users/.brol) est une manière de cacher ce dossier. Mais l'objection que je ferais pour un dossier de compte d'utilisateur est que l'
intitulé est intrinsèquement modifié par l'ajout du
. qui fait désormais partie du nom du dossier. Si tu n'édites pas > dans le fichier
Carte-d'Identité brol.plist le paramètre du chemin au dossier de départ qui est au départ ceci :
Bloc de code:
<key>home</key>
<array>
<string>/Users/brol</string>
</array>
de la manière suivante :
Bloc de code:
<key>home</key>
<array>
<string>/Users/.brol</string>
</array>
le chemin au dossier de départ est cassé.
C'est pourquoi je trouve plus avantageuse l'autre manière de masquer le dossier de départ > par la commande
chflags (
change_flags = modifier les attributs fixés aux objets) et la mention
hidden (caché) qui fixe l'attribut (ou
flag) "
hidden" sur l'objet-cible.
Ce
flag est adressé au
Finder qui, en le lisant sur l'objet > n'affiche pas ce dernier graphiquement. L'avantage > c'est que
l'intitulé de l'objet n'est pas modifié > donc le chemin au dossier de départ n'a pas à être édité dans le fichier
Carte-d'Identité brol.plist.