1. Avertissements

Ce document est le résultat et l'adaptation synthétique de l'utilisation d'une trentaine de postes sous Debian 7 pendant l'année 2013 - 2014. Il sert actuellement de base au déploiement de Xubuntu 14.04 en remplacement de Debian 7. Il fait intervenir de nombreux logiciels et concepts techniques : il s'adresse donc plutôt à un public ayant déjà une connaissance générale de « l'écosystème » Windows et GNU/Linux. De plus, les personnes souhaitant utiliser ce document doivent être conscientes qu'il n'est pas l'œuvre d'experts, et donc :

Si cette procédure semble fastidieuse, sachez qu'avec l'habitude, en groupant quelques commandes et en copiant les fichiers d'un poste déjà configuré, la préparation d'un poste n'est pas plus longue qu'avec Windows (et si on compte les mises à jour du système, c'est même bien plus rapide).

De plus, un script et des fichiers de configuration sont fournis avec ce document, et permettent la configuration presque automatique d'un poste, en les ayant au préalable adapté pour votre environnement (ils ne sont plus à jour).

Finalement, sachez qu'une fois que vous avez configuré un poste, vous pouvez le cloner sur n'importe quelle autre machine, du moment que :

Ça, par rapport à Windows, ça fait gagner du temps, et pas qu'un peu.

La documentation et les fichiers dans leur dernière version peuvent être trouvé à l'adresse http://unptitcoin.no-ip.org/index.php?article28/poste-de-travail-xubuntu-14-04-integre-a-un-environnement-active-directory .

Ce document vous guidera, mais ne vous dispensera pas de questions et de recherches annexes.

Je vous conseille fortement de lire la procédure en entier avant de la mettre en œuvre.

2. Choix

On choisit Xubuntu 14.04, qui me semble un bon compromis entre légèreté et apparence, tout en étant supportée (en partie, voir la commande « ubuntu-support-status ») par Canonical jusqu'en 2019. De plus, les ressources sont nombreuses sur Internet, en cherchant pour Ubuntu ou Debian.

Les tests ont été fait avec Windows 2003 Server ainsi que Windows 2008 Server en tant que contrôleur de domaine et serveur de fichier. Le serveur d'impression a été testé avec un Windows 2003 Server, et probablement avec un 2008 Server.

Note : Cette procédure peut ne pas marcher parfaitement si des contrôleurs de domaine sous 2003 Server et supérieur composent le domaine. Cela semble du au changement de cryptage utilisé dans les échanges Kerberos. Si vous trouvez la solution, n'hésitez pas à la partager.

Les profils utilisateurs seront locaux à la machine.

Les postes auront une adresse IP fixe et ne seront pas utilisés à l'extérieur de l'établissement (le contrôleur de domaine doit être joignable).

On prend pour FQDN du contrôleur de domaine « dc.le.domaine ».

Pour simplifier, Xubuntu sera le seul OS sur la machine.

On installe une version 64 bits de Xubuntu.

Code couleur pour tenter de faciliter la lecture :

Chemin d'un fichier ou répertoire ;

Élément à modifier dans un fichier de configuration ;

Élément à modifier selon votre infrastructure.

3. Installation

On crée une clé USB bootable à partir de l’image ISO de Xubuntu 14.04, par exemple avec l’utilitaire Unetbootin (disponible sur toutes les plates-formes.

Démarrer sur la clé USB, et lancer l'installation :

Note : minuscules et majuscules autorisées, mais mettre 15 caractères maximum : ça devrait éviter des problèmes si jamais nos ordinateurs se servent toujours de NetBios.

L'installation se termine, on peut redémarrer sur notre système fraîchement installé.

4. Configuration du réseau et mise à niveau des paquets

Configurer le réseau en allant dans « Tous les paramètres, Connexions réseau ». Définir le contrôleur de domaine comme serveur DNS. Penser également à ajouter le domaine (ici « le.domaine ») dans « Domaines de recherche » et à désactiver IPv6, inutile.

Pour faire les mises à jours, aller dans « Outils système, Gestionnaire de mises à jour ». Une fois l'opération terminée, ne pas redémarrer tout de suite.

Ajouter les traductions françaises manquantes en allant dans « Préférences, Prise en charge des langues ». Redémarrer.

Note : il est possible qu'il demande le mot de passe administrateur, ce ne sera pas le cas les prochaines fois.

5. Lightdm

On configure Lightdm (le gestionnaire de sessions graphiques) pour qu’il n’affiche pas les noms des utilisateurs locaux et pour interdire l’accès « invité ». De plus, on active le pavé numérique au démarrage. Pour cela installer numlockx :

$ sudo apt install numlockx

Ensuite, modifier en tant qu’administrateur le fichier /etc/lightdm/lightdm.conf.d/10-xubuntu.conf pour ajouter les trois dernières lignes :

[SeatDefaults]
user-session=xubuntu
greeter-hide-users=true
allow-guest=false
greeter-setup-script=/usr/bin/numlockx on

Note : si vous ne voulez pas que l'écran se mette en veille au bout de 10 minutes si personne n'est connecté sur la machine, vous pouvez ajouter à ce fichier la ligne suivante :

xserver-command=X -s 0 -dpms

Pour mettre à jour la configuration, ouvrir une console TTY, puis relancer Lightdm (cela fermera les sessions graphiques ouvertes) :

$ sudo service lightdm restart

6. Intégration au domaine

Installation des paquets nécessaires à l'intégration au domaine :

$ sudo apt install realmd sssd sssd-tools samba-common krb5-user ntp

L'installation du client Kerberos nous demande le royaume par défaut, qu'il faut mettre en majuscules : LE.DOMAINE

Modifier le fichier /etc/ntp.conf en repérant les lignes commençant par « server » et en ajoutant juste avant celles-ci notre contrôleur de domaine :

...
server dc.le.domaine
...

Note : Si vous avez plusieurs contrôleurs de domaine, ajoutez-les.

Redémarrer le service démon ntp :

$ sudo service ntp restart

Créer le fichier /etc/sssd/sssd.conf pour y mettre le contenu suivant :

$ sudo nano /etc/sssd/sssd.conf
[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
default_domain_suffix = LE.DOMAINE

[pam]
reconnection_retries = 3

Modifier les permissions de ce fichier :

$ sudo chmod 600 /etc/sssd/sssd.conf

Note : des ajustements très intéressants pourraient être faits dans /etc/realmd/realmd.conf et /etc/sssd/sssd.conf, par exemple pour pouvoir utiliser son compte même si le contrôleur de domaine n'est pas joignable. Voir pour cela http://manpages.ubuntu.com/manpages/trusty/en/man5/realmd.conf.5.html et http://manpages.ubuntu.com/manpages/trusty/man5/sssd.conf.5.html.

Ajouter la machine au domaine (« administrateur » est un compte ayant les droits d'administration sur le domaine – la casse ne semble pas importante) :

$ sudo realm join dc.le.domaine -U administrateur --verbose

Note : depuis quelque temps un bug a été introduit dans Ubuntu, et la commande précédente peut donc échouer à causede dépendances impossibles à satisfaire (voir https://bugs.launchpad.net/ubuntu/+source/realmd/+bug/1333694, qui propose également plusieurs contournements).

Note : dans le cas où vos contrôleurs de domaine sont composés de 2003 Server **et* supérieurs, il semble qu'il faille préciser dans cette commande celui tournant sous 2003 Server (pour éviter des problèmes de cryptage lors des échanges de ticket Kerberos).

Notre machine doit maintenant être rentrée dans le domaine.

Le fichier /etc/sssd/sssd.conf a été complété automatiquement, mais il nous faut encore basculer à « False » la directive suivante (pour ensuite pouvoir monter les répertoires utilisateurs) :

...
use_fully_qualified_names = False
...

Note : la machine est bien intégrée au domaine, mais n'est pas encore fonctionnelle : les utilisateurs du domaine n'ayant pas de répertoire personnel sur la machine, vous devez réaliser la partie suivante avant de pouvoir ouvrir une session graphique.

7. Création automatique du répertoire personnel local et montage des répertoires réseaux

7.1. Méthode « statique » avec pam_mount

Installer les paquets nécessaires :

$ sudo apt install libpam-mount cifs-utils

Se connecter une première fois avec un utilisateur du domaine, en console, et changer les permissions de ce répertoire :

$ sudo chmod 777 /var/run/pam_mount

On doit modifier le comportement de PAM pour Lightdm : éditer en tant qu’administrateur /etc/pam.d/lightdm pour ajouter les deux lignes surlignées à la fin (la première ligne crée un répertoire local à l'utilisateur du domaine, la seconde appelle le fichier que nous allons remplir juste après) :

...
session required        pam_env.so readenv=1 user_readenv=1 envfile=...
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0077
session optional        pam_mount.so
@include common-password

Note : la gestion de l'authentification comme elle est configurée ici fait que le système va d'abord consulter les utilisateurs locaux puis les utilisateurs du domaine.

Note : pam_mkhomedir, avec cet umask, va créer des répertoires personnels interdits en lecture par d'autres utilisateurs « non root », ce qui n'est pas le comportement normal sous Debian / Xubuntu :

On va ici monter tous les lecteurs réseau dans des sous-dossiers de /media/, mais on pourrait tout à fait choisir de les monter ailleurs, dans des sous-dossiers de ~/ par exemple.

Note : les utilisateurs ont généralement accès à des partages réseaux différents. Dans le fichier suivant, vous pouvez mettre tous les partages susceptibles d'être utilisés sur cette machine : seuls ceux auxquels l'utilisateur a accès seront montés. Pour une configuration plus fine, il est possible de préciser pour chaque utilisateur / groupe les partages correspondant (voir la section « Extended user control » de la page de manuel de pam_mount.conf).

Choisir les répertoires à monter ainsi que leur point de montage en créant le fichier /etc/security/pam_mount.conf.xml. En voici un exemple :

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!--
	See pam_mount.conf(5) for a description.
-->

<pam_mount>

		<!-- debug should come before everything else,
		since this file is still processed in a single pass
		from top-to-bottom -->

<debug enable="0" />

		<!-- Volume definitions -->
<volume fstype="cifs" server="dc" path="%(DOMAIN_USER)$" mountpoint="/media/%(USER)"
                options="workgroup=LE,nobrl,uid=%(USER),nosuid,nodev" >
	<not> <user>localadmin</user> </not>
</volume>

<volume fstype="cifs" server="dc" path="echange_eleves" mountpoint="/media/Echanges_eleves"
        options="workgroup=LE,nobrl,uid=%(USER),nosuid,nodev" >
	<not> <user>localadmin</user> </not>
</volume>
		<!-- pam_mount parameters: General tunables -->

<!--
<luserconf name=".pam_mount.conf.xml" />
-->

<!-- Note that commenting out mntoptions will give you the defaults.
     You will need to explicitly initialize it with the empty string
     to reset the defaults to nothing. -->
<mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" />
<!--
<mntoptions deny="suid,dev" />
-->
<mntoptions allow="*" />
<!--
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />

<logout wait="2" hup="0" term="0" kill="0" />


		<!-- pam_mount parameters: Volume-related -->

<mkmountpoint enable="1" remove="true" />


</pam_mount>

Note : « path » correspond au nom du partage Windows et « mountpoint » au répertoire local où il sera monté. Ce dernier sera créé au montage et supprimé au démontage, automatiquement. L'option « workgroup » correspond à la première partie du nom de domaine (ici « le.domaine »). Pour plus d'informations, notamment sur les variables %(USER) et %(DOMAIN_USER), voir http://manpages.ubuntu.com/manpages/trusty/man5/pam_mount.conf.5.html.

Note : il est possible d'activer le débogage en mettant à « 1 » la valeur de « debug_enable » au début du fichier. Les informations de débogage se retrouveront dans /var/log/auth.log.

Redémarrer la machine et tester : normalement le fonctionnement de base est là.

Note : Une fois l'utilisateur du domaine connecté sur la machine, il peut tout à fait parcourir les répertoires partagés sur le réseau et y accéder sans avoir à taper son mot de passe (s'il a les droits sur le partage bien sûr). Cette fonctionnalité utilise GVFS.

7.2. Méthode « dynamique » avec GVFS

C'est la solution que je retiens maintenant. Je l'ai moins testée que la méthode précédente, mais elle a l'avantage de reproduire le comportement de Windows qui utilise des scripts de connexion Batch ou VBS, présents sur le partage « netlogon » pour monter les partages réseau. On peut donc exécuter des scripts différents selon les utilisateurs en y choisissant quel partage on veut monter (et y faire n'importe quoi d'autre comme changer les fonds d'écran), et on se retrouve avec une gestion centralisée des partages montés à l'ouverture de session, ce qui est quand même bien pratique.

L'inconvénient principal que j'ai pu constater est la vitesse de transfert, environ divisée par deux, mais ça n'est pas vraiment gênant pour notre utilisation. De plus, il vous faudra un peu plus de temps pour comprendre mes scripts.

Installer les paquets nécessaires :

$ sudo apt install cifs-utils

On doit modifier le comportement de PAM pour Lightdm : éditer en tant qu’administrateur /etc/pam.d/lightdm pour ajouter la ligne surlignée à la fin, qui crée un répertoire local à l'utilisateur du domaine à la première connexion sur la machine :

...
session required        pam_env.so readenv=1 user_readenv=1 envfile=...
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0077
@include common-password

Note : la gestion de l'authentification comme elle est configurée ici fait que le système va d'abord consulter les utilisateurs locaux puis les utilisateurs du domaine.

Note : pam_mkhomedir, avec cet umask, va créer des répertoires personnels interdits en lecture par d'autres utilisateurs « non root », ce qui n'est pas le comportement normal sous Debian / Xubuntu :

Créer le fichier /opt/login-script.sh, avec le contenu suivant, en remplaçant le nom du serveur :

#!/bin/bash

# exécute pour les utilisateurs AD un script présent sur le partage netlogon du serveur

server=dc.le.domaine
share=netlogon
script=linux-login-script.sh

# on vérifie que l'utilisateur n'est pas local à la machine, et donc n'apparaît pas dans /etc/passwd
grep ^"$USERNAME": /etc/passwd
if [ $? = 0 ]; then
        exit 0
fi

# on monte le partage contenant notre script
gvfs-mount smb://"$server"/"$share"

# Si le partage a bien été monté
if [ -d /run/user/"$UID"/gvfs/smb-share\:server\="$server"\,share\="$share"/ ]; then
        # on exécute le script présent sur ce partage avec en paramètre le nom du serveur
        /run/user/"$UID"/gvfs/smb-share\:server\="$server"\,share\=$share/"$script" "$server"
        # si le script n'a pas été trouvé
        if [ $? = 127 ]; then
                zenity --warning --text="Le script de connexion n'a pas été trouvé,\n\
les partages réseaux ne seront pas accessibles :\n\n\
Essayez d'ouvrir votre session à nouveau ou contactez l'administrateur." &
		gvfs-mount -u smb://$serverName/$share
		exit 1
        fi
else
        zenity --warning --text="Impossible de monter le partage réseau contenant les scripts d'ouverture de session,\n\
les partages réseaux ne seront pas accessibles :\n\n\
Essayez d'ouvrir votre session à nouveau ou contactez l'administrateur." &
	exit 1
fi

# on démonte le partage
gvfs-mount -u smb://"$server"/"$share"

exit 0

Penser à rendre ce script exécutable :

$ sudo chmod +x /opt/login-script.sh

On lancera ce script à la connexion de l'utilisateur (voir la partie sur le profil par défaut). Il monte le partage netlogon de votre contrôleur de domaine et y exécute le script « linux-login-script.sh » qui :

Attention : bien que situés sur un serveur Windows, ces scripts doivent probablement avoir des fins de ligne de type Unix (voir https://en.wikipedia.org/wiki/Newline#Representations) pour être exécutés correctement. Sous Windows, je vous conseille l'excellent éditeur Notepad++ qui sait gérer ce type de fin de ligne.

Note : ces scripts étant de moi, il ne sont certainement pas parfaits et contiennent peut-être des erreurs.

8. Sécurisation

8.1. Activation du compte root

Ici on fait plutôt baisser le niveau de sécurité… Activer le compte root n'est absolument pas obligatoire, mais cela se révèle bien pratique ensuite, par exemple pour déployer des fichiers de configuration à distance.

$ sudo su
# passwd

8.2. Grub2

Ouvrir une session graphique pour cette partie : ça permettra de faire des « copier / coller » dans l'émulateur de terminal.

Il nous faut enlever l'entrée « recovery » de Grub2 au démarrage, pour éviter que n'importe qui puisse obtenir des droits administrateur (si on n'active pas le compte root sur notre machine) : dans /etc/default/grub dé-commenter la ligne GRUB_DISABLE_RECOVERY= "true".

S'il est impossible d'afficher Grub au démarrage en maintenant Shift appuyée (car la résolution n'est pas acceptée par l'écran), dé-commenter également la ligne « GRUB_GFXMODE=640x480 ».

Note : pour éviter un avertissement de Grub lorsqu'il se reconfigure, on peut changer ces paramètres : « GRUB_HIDDEN_TIMEOUT=2 » et « GRUB_TIMEOUT=0 ».

Il nous faut mettre un mot de passe à Grub (voir notamment https://help.ubuntu.com/community/Grub2/Passwords). Cela empêche d'éditer les entrées du menu sans le mot de passe, pour avoir accès au mode « recovery » , booter sur un cd, etc….

Note : attention, le clavier est en QWERTY lorsque l'on tape l'identifiant et le mot de passe dans Grub.

On génère un hachage de notre nouveau mot de passe pour qu'il ne soit pas stocké en clair sur le disque :

$ grub-mkpasswd-pbkdf2

Copier le résultat de la commande pour la suite (en commençant par « grub.pbkdf2… »).

Éditer en tant qu’administrateur le fichier /etc/grub.d/40_custom en ajoutant à la fin :

set superusers="administrateur"
password_pbkdf2 administrateur mot_de_passe_haché

Note : le nom « administrateur » est arbitraire, vous pouvez mettre n'importe quoi.

La nouvelle version de Grub (2.x) nous impose de préciser « il ne faut pas de mot de passe pour démarrer sur Linux » (voir https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=708181). Pour cela, éditer en tant qu'administrateur le fichier /etc/grub.d/10_linux, et ajouter l'option en bleu (dans la fonction « linux_entry () » du script) :

...
echo "menuentry '$(echo "$title" | grub_quote)' --unrestricted ${CLASS} \$menuentry_id_option ...
else
echo "menuentry '$(echo "$os" | grub_quote)' --unrestricted ${CLASS} \$menuentry_id_option ...
...

Voir http://daniel-lange.com/archives/75-Securing-the-grub-boot-loader.html.

Note : cette dernière configuration sera à priori écrasée par une mise à jour de Grub, soyez vigilant si vous le mettez à jour.

On actualise la configuration de Grub pour qu'il prenne en compte nos réglages :

$ sudo update-grub2

8.3. Gestion des terminaux TTY

Nos élèves n'ont pas besoin d'utiliser les terminaux virtuels (Ctrl + Alt + F1-6), on choisit donc de n'autoriser que localadmin (et root si on l'a activé). Éditer le fichier /etc/security/access.conf, dé-commenter le premier exemple et ajouter à cette règle les autres terminaux :

...
-:ALL EXCEPT localadmin:tty1 tty2 tty3 tty4 tty5 tty6
...

Pour que ce fichier de configuration soit pris en compte, on doit également éditer /etc/pam.d/login pour y dé-commenter la ligne suivante :

account required 	pam_access.so

(http://susefaq.sourceforge.net/howto/pam.html)

9. Accès SSH

Si on souhaite pouvoir administrer nos machines à distance, on doit installer un serveur OpenSSH :

$ sudo apt install openssh-server

Pour limiter l'utilisation de la machine à une utilisation de poste de travail standard, on décide d'interdire les utilisateurs, excepté « localadmin » (et root si on l'a activé), de se connecter en SSH. On décide également de ne pas autoriser la redirection de X11 (voir man sshd_config).

Dans /etc/ssh/sshd_config on bascule donc « X11Forwarding » à « no », « PermitRootLogin » à « yes » (si on a activé l'utilisateur root) et on ajoute tout à la fin la ligne « AllowUsers localadmin » (ou « AllowUsers localadmin root »). Penser à redémarrer sshd :

# sudo service ssh restart

10. Logiciels utilisateurs

10.1. Modification des sources des logiciels

Il ne sert à rien dans notre cas de pouvoir télécharger les fichiers sources des logiciels (sauf peut-être sur le poste de l’administrateur si celui-ci est bien barbu).

On modifie donc en tant qu’administrateur /etc/apt/sources.list, pour commenter toutes les lignes commençant par « deb-src ».

Actualiser ensuite le cache des paquets disponibles :

$ sudo apt update

Note : ce qui est décrit ci-dessus n’est absolument pas nécessaire, mais c'est ce fichier qu'il faudrait modifier si on souhaite utiliser un miroir local des dépôts Xubuntu.

10.2. Installation de logiciels « propriétaires »

Si on veut pouvoir utiliser les polices Microsoft de base, avoir le plugin flash, lire des DVD, etc... :

$ sudo apt install ubuntu-restricted-extras

Puis pour « activer » la lecture des DVD :

$ sudo /usr/share/doc/libdvdread4/install-css.sh

Note : Il faudrait peut-être définir la région du lecteur, voir https://help.ubuntu.com/community/RestrictedFormats/PlayingDVDs#Setting_DVD_Region_Codes). Cependant, avec VLC (installé plus loin), ça marche très bien.

On peut également installer des polices supplémentaires, même si je ne suis pas assuré de la légalité de la chose : par exemple pour installer la police Tahoma on va la prendre depuis un poste Windows (ne pas oublier la version « bold »), puis :

$ sudo mkdir /usr/share/fonts/truetype/tahoma
$ sudo cp chemin_tahoma.ttf /usr/share/fonts/truetype/tahoma/
$ sudo cp chemin_tahomabd.ttf /usr/share/fonts/truetype/tahoma/

Note : il y aura toujours des polices propriétaires que les gens ne trouveront pas sur Linux.

10.3. Installations de logiciels supplémentaires

On installe ensuite ces logiciels dont nos utilisateurs ont souvent besoin (c'est un exemple) :

$ sudo apt install libreoffice libreoffice-l10n-fr libreoffice-help-fr vlc audacity gnome-screeshot \
  gthumb inkscape openshot openjdk-7-jre icedtea-7-plugin verbiste-gnome geogebra-gnome pdfmod \
  ocrfeeder tesseract-ocr-fra fonts-opendyslexic p7zip-full

On désinstalle ensuite les logiciels inutiles ou faisant doublon (c'est toujours un exemple) :

$ sudo apt purge abiword gnumeric xfce4-screenshooter ristretto parole pidgin xchat gnome-mines \
  gnome-sudoku transmission-gtk xfce4-dict light-locker

Note : On désinstalle light-locker, car le verrouillage de session déconnecte les répertoires réseaux (voir https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/1374379). Si on a besoin de pouvoir verrouiller la session, on utilisera par exemple le paquet « i3lock ».

Note : penser à tester le plugin Java une première fois, il demande beaucoup de confirmations (en anglais) avant de se lancer, ce qui risque de faire peur à l'utilisateur lambda.

Note : Adobe ne fait plus que des mises à jour de sécurité pour son plugin flash Linux : il est possible que cela pose problème sur certains sites (voir https://www.adobe.com/fr/software/flash/about/).

Note : si on a pas peur des dépendances KDE (245 Mo), on peut également installer KmPlot (et sa traduction française, kde-l10n-fr), outil génial pour tracer des fonctions. Les outils éducatifs sont très nombreux, ne pas hésiter à fouiller un peu !

11. Configurer l'impression

11.1. Choix

On configure ici CUPS, qui permet d'utiliser différents « backend » (types de connexions à l'imprimante : USB, série, SMB, IPP,…). L'idéal en théorie serait d'utiliser le backend SMB comme les postes Windows, mais celui-ci pose problème pour l'authentification de l'utilisateur (voir https://bugs.launchpad.net/ubuntu/+source/cups/+bug/788167). Il serait intéressant de voir si cette méthode fonctionne avec Xubuntu 14.04. Un contournement de ce problème existe, mais n'est pas « viable » : http://ubuntuforums.org/showthread.php?t=2176738 . Ce protocole peut cependant marcher « sans bidouille » si on définit sur le poste, dans la configuration de l'imprimante, le nom d'utilisateur ainsi que son mot de passe, mais ce n'est pas idéal pour un poste multi-utilisateurs.

D'un autre côté il est possible d'utiliser LPD :

On détaille donc ici l'impression avec LPD, que j'utilise.

11.2. Utilisation de LPD

Sur le serveur d'impression Windows, installer le « service d'impression pour Unix ». Il faut pour cela aller dans le « panneau de configuration », « ajouter/supprimer des programmes », « installer des composants Windows ». Utiliser le CD/DVD d'installation de Windows.

Sur le poste Xubuntu, aller dans « Tous les paramètres, Imprimantes ». Cliquer sur « Ajouter ». Si demandés, taper le nom de l’administrateur local et son mot de passe.

Dans la colonne de gauche, choisir « Saisir l'URI », puis dans la colonne de droite, taper lpd://nom_serveur/nom_partage_imprimante.

Choisir ensuite la marque de l'imprimante, puis son modèle. La liste de droite contient parfois plusieurs pilotes, préférer généralement celui recommandé. Selon le modèle d'imprimante, il faudra donner les caractéristiques précises de l'imprimante (nombre de bacs installés,…).

Petit lexique, à compléter :

Choisir ensuite le nom de l'imprimante sur l'ordinateur, et éventuellement une description et un emplacement.

La dernière fenêtre permet de définir plusieurs choses intéressantes, notamment :

11.3. Commentaires à propos du pilote d'imprimante

Il est possible de regarder si une imprimante est supportée (théoriquement) par CUPS sur http://www.openprinting.org/printers.

Lors du choix de la marque et du modèle, on ne choisit pas un pilote au sens Windows, mais un fichier texte (.ppd) décrivant les capacités de l'imprimante.

En modifiant l'un de ces fichiers texte, on peut tout à fait supprimer certaines options (par exemple supprimer tous les formats sauf le A4, utile car Firefox veut par défaut imprimer au format US Letter…).

Les PPD « gutenprint » proposent un très grand nombre d'options, souvent plus que les pilotes Windows.

Les imprimantes HP proposent un « vrai » pilote libre pour leurs imprimantes /imprimantes multifonctions : HPLIP.

De plus, j'ai constaté parfois de meilleurs résultats en utilisant un pilote générique pour la marque (duquel je retirais les options incompatibles avec l'imprimante réelle) : génération plus rapide du fichier PostScript, possibilité d'imprimer des fichiers qui autrement feraient planter l'imprimante… De plus, j'ai parfois constaté sous Debian Wheezy de nettes améliorations si le pilote ne propose que PostScript et pas PDF.

Il est facile de déployer ou modifier une imprimante sur plusieurs postes : déployer ou éditer les fichiers /etc/cups/printers.conf et /etc/cups/ppd/nom_imprimante (en pensant à arrêter CUPS pendant la manipulation).

Bref, tout ça pour dire que ça demande du temps pour chercher les meilleures configurations selon le modèle d'imprimante : c'est le point le plus compliqué à gérer selon moi.

12. Arrêt automatique le soir

Créer le script /opt/arret-automatique.sh (le nom et l'emplacement sont arbitraires), et modifier si vous le souhaitez les variables en vert :

#!/bin/bash

# Ce script éteint l'ordinateur si personne n'est connecté.
# Si un utilisateur est connecté en graphique, un message d'avertissement lui sera affiché
# lui permettant d'éteindre l'ordinateur immédiatement ou d'annuler l'arrêt.
# Si cet utilisateur graphique ne fait rien, le script éteindra l'ordinateur.
# Le script quittera si plus d'un utilisateur est connecté
# ou si des utilisateurs non graphiques sont connectés (TTY ou émulateur de terminal).

# Notes :
#       les documents de l'utilisateur en cours d'édition ne sont pas sauvegardés
#       ce script doit être lancé par cron en tant que root
#       on part du postulat que seul "localadmin" peut se connecter autrement qu'en graphique
#       (ssh, émulateur de terminal, console tty)

###################### variables #########################

# temps d'affichage du message utilisateur avant extinction automatique, en minutes
timetowait=5
# variable contenant l'heure à laquelle s’arrêtera l'ordinateur, pour affichage utilisateur
halttime=$(date --date="$timetowait minutes" +%Hh%M)
# message à afficher
message="L'ordinateur s'éteindra automatiquement à "$halttime", pour une nuit bien méritée."
okbtn="Éteindre l'ordinateur maintenant"
cancelbtn="Ne pas éteindre l'ordinateur automatiquement"

##########################################################

# on définit la variable contenant le nombre de personnes connectées
nbusers=$(who | wc -l)
# si personne n'est connecté on éteint la machine immédiatement
if [ $nbusers = 0 ]; then poweroff; exit; fi
# si plus d'un processus lxsession est lancé, on quitte le script
nbusers=$(ps -ef | grep lxsession | wc -l)
if [ $nbusers -gt 2 ]; then exit; fi

# si "localadmin" est connecté (probablement pour de la maintenance), on quitte le script
who | grep localadmin && exit

# si on arrive à ce stade c'est qu'un seul utilisateur "normal" est connecté,
# on va donc le prévenir et arrêter l'ordinateur s'il ne fait rien

# temps d'affichage du message avant extinction automatique, en secondes
timetowaits=$(($timetowait*60))
# variable contenant le nom de l'écran de l'utilisateur
# (exclue les terminaux virtuels non graphiques et les émulateurs de terminaux)
xdisplay=$(who | grep "(:" | cut -d '(' -f2 | cut -d ')' -f1)
# variable contenant le nom de l'utilisateur connecté
# (exclue les terminaux virtuels non graphiques et les émulateurs de terminaux)
connecteduser=$(who | grep "(" | cut -d ' ' -f1)

# on affiche le message à l'utilisateur
DISPLAY=$xdisplay sudo -u $connecteduser zenity --question --text="$message" --ok-label="$okbtn" \
 --cancel-label="$cancelbtn" --timeout="$timetowaits"
# on test la valeur du code de retour :
#       0 si l'utilisateur clique sur "$okbtn"
#       1 si l'utilisateur clique sur "$cancelbtn" ou appuie sur la touche "Échap"
#       5 si l'utilisateur le compte à rebours arrive à sa fin
#       -1 si il y a eu une erreur inattendue
returncode=$?
if [ $returncode -eq 1 -o $returncode -eq -1 ]
then
        exit
else
        # on vérifie que personne d'autre ne s'est connecté entre temps
        nbusers=$(who | wc -l)
        if [ $nbusers = 1 ]
        then
                # on ferme la session le plus proprement possible
                sudo killall -s SIGTERM xfce4-session
                # dans le doute on attend un peu le temps que la session se ferme
                sleep 7
                # on éteint finalement l'ordinateur
                poweroff
                exit
        fi
fi

Note : ce script étant de moi, il n'est certainement pas parfait et contient peut-être des erreurs.

On lui affecte les droits d’exécution :

$ sudo chmod +x /opt/arret-automatique.sh

Vu que ce script ne fait rien si un utilisateur utilise une console TTY ou un émulateur de terminal, vous ne pouvez le tester qu'en le définisant comme tâche cron, ci-dessous. Ce comportement est voulu : dans mon cas, seul l'administrateur lance des terminaux, et je ne veux pas que l'ordinateur s'éteigne tout seul alors que je suis en train d'effectuer des tâches de maintenance, et ce quelle que soit l'heure.

Afin de décider du moment où le script sera lancé, on ajoute une tâche cron en créant le fichier /etc/cron.d/arret-automatique :

PATH=/bin:/sbin/:/usr/bin

# m h dom mon dow ident. commande
00 19 * * *     root    /opt/arret-automatique.sh

Ici, le script sera lancé tous les jours à 19h00.

Note : la ligne vide à la fin de ce fichier est obligatoire.

13. Mises à jour automatiques

On décide ici d’avoir une maintenance minimale et donc de mettre à jour automatiquement le plus de choses possibles, même si ce n’est théoriquement pas très prudent.

On configure les mises à jour automatiques avec unattended-upgrades, dont le fichier de configuration est /etc/apt/apt.conf.d/50unattended-upgrades.

Au début de ce fichier, dé-commenter la ligne de la section « Unattended-Upgrade::Allowed-Origins » se terminant par « updates » (voir notamment http://www.richud.com/wiki/Ubuntu_Enable_Automatic_Updates).

Pour éviter la mise à jour automatique de Grub (vu les changements qu'on y a fait), ajouter le nom du paquet dans la section « Package-Blacklist » :

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
        "grubpc";
};

Ne pas décommenter la ligne suivante, sinon apt attend au moins 30 secondes entre la mise à jour de chaque paquet :

# Unattended-Upgrade::MinimalSteps "true";

On les installe à l'arrêt de l'ordinateur :

Unattended-Upgrade::InstallOnShutdown "true";

On autorise la suppression automatique des paquets qui ne sont plus utilisés :

Unattended-Upgrade::Remove-Unused-Dependencies "true";

Modifier ensuite le fichier /etc/apt/apt.conf.d/10periodic, comme expliqué dans le fichier /etc/cron.daily/apt.

# nano /etc/apt/apt.conf.d/10periodic
// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

Le téléchargement des mises à jour et leur installation se feront à l'arrêt de la machine, et seront affichés à l'écran.

14. Créer un profil type

14.1. « Purger » un profil

Si besoin, « purger » le profil de l'utilisateur du domaine qui va nous servir à tester l'application de notre profil type :

$ sudo rm -r /home/domaine/utilisateur_du_domaine
$ sudo rm -r /tmp/hsperfdata_utilisateur_du_domaine

Se connecter avec un compte qui nous servira de modèle, ici « localadmin ».

14.2. Monter les partages réseau à la connexion

Créer le sous-répertoire du profil par défaut qui contiendra le fichier suivant :

$ sudo mkdir -p /etc/skel/.config/autostart

Créer le fichier /etc/skel/.config/autostart/login-script.desktop avec le contenu suivant :

[Desktop Entry]
Name=Login script
Comment=Exécute un script présent sur le partage netlogon
Exec=/opt/login-script.sh

14.3. Indiquons « ne rien enregistrer sur l'ordinateur »

Pour bien préciser aux utilisateurs qu'il ne faut rien enregistrer en local sur l'ordinateur, on peut créer un fichier dans « ~/ » nommé « NE-RIEN-ENGISTRER-ICI », pour chaque type de fichier habituel (odt, odp, ods, doc, ppt, xls, docx, xlsx, pptx, pdf, jpg, png, gif, svg, bmp, txt) : c'est une solution assez « basique » mais ça marche plutôt bien en général. Copier ces fichiers dans le profil par défaut :

$ sudo cp ~/NE-RIEN-ENREGISTRER-ICI* /etc/skel/

Pour en plus afficher une petite fenêtre explicative à la connexion, créer le fichier /etc/skel/.config/autostart/ou-enregistrer.desktop :

[Desktop Entry]
Name=Où enregistrer
Comment=Expliquer aux utilisateurs où enregistrer leurs documents
Exec=zenity --info --text="Pour retrouver vos documents sur tous les ordinateurs, " \
     "penser à les enregistrer dans le répertoire <b>du même nom que votre identifiant</b> sur le réseau."

14.4. Xfce4

Beaucoup de préférences incombent à Xfce, et notamment toutes celles qui suivent.

On place notre fond d’écran assez arbitrairement dans /usr/share/xfce4/backdrops/ :

$ sudo mv fond.jpg /usr/share/xfce4/backdrops/
$ sudo chmod 744 /usr/share/xfce4/backdrops/fond.jpg

On le définit comme fond d'écran en faisant un clic droit sur le bureau et en allant dans « Paramètres du bureau… ». On peut également afficher certaines icônes sur le bureau (corbeille et périphériques amovibles me semblent les plus adaptés ici).

On pourrait placer le tableau de bord en bas pour ne pas trop perturber nos utilisateurs, mais cela peut poser problème dans certains cas (voir https://bugs.launchpad.net/ubuntu/+source/xfwm4/+bug/1397922).

On peut ajouter au tableau de bord le greffon « Afficher le bureau » et un lanceur pour le gestionnaire de fichiers. Je ne rajoute volontairement rien d'autre : les utilisateurs devront aller dans le menu et y découvriront des logiciels.

On va ne laisser qu'un seul bureau virtuel : aller dans « Tous les paramètres, Espaces de travail »

On va activer le « snapping » à la Windows7 en allant dans « Tous les paramètres, Gestionnaire de fenêtres, Avancé » et en décochant « Avec une fenêtre traînée ».

On va désactiver la mise en veille de l'écran pour que les utilisateurs n'oublient pas de fermer leur session : aller dans « Tous les paramètres, Gestionnaire d'alimentation », aller dans la catégorie « Sur secteur » et dans l'onglet « Écran » pour placer les curseurs tout à gauche.

Dans le menu des applications, choisir les applications « favorites » pour qu'elles correspondent à vos besoins.

Faire un clic droit sur l'icône du menu et aller dans « Propriétés » pour changer l'« Affichage » pour « icônes et texte », changer le « Titre » pour « Menu » et cocher « Montrer les descriptions des applications ». Dans l'onglet « Comportement », décocher ou modifier « Verrouiller l'écran ».

On va simplifier l'accès à l'outil de capture d'écran en allant dans « Tous les paramètres, Clavier, Raccourcis d'applications », en supprimant le raccourci assigné à « Alt+Impr » (que personne n'aura l'idée d'utiliser) et modifiant celui assigné à « Impr » par « gnome-screenshot -i ». On modifie également « Ctrl+Alt+Suppr » pour qu'il lance « xfce4-task-manager ».

On crée le dossier qui va recevoir ces paramètres :

$ sudo mkdir -p /etc/skel/.config/xfce4/

Et on copie les répertoires et fichiers utiles :

$ sudo cp -r ~/.config/xfce4/panel
$ sudo cp -r ~/.config/xfce4/xfconf

14.5. Firefox

Lancer Firefox pour : -Définir la page d'accueil ; -Installer AdBlockPlus ; -Supprimer les marques-pages par défaut et ajouter ceux que l’on souhaite (ENT, les webmails Educagri, BCDI, le dictionnaire du CNRTL, WordReference) ; -Aller dans les préférences :

Ouvrir un nouvel onglet et y choisir qu'un nouvel onglet ouvre une page vide.

Utiliser la barre de recherche en haut à droite et cliquer sur « Next » pour que les gens n'ai pas à cliquer la prochaine fois (du moins tant que c'est en anglais…). Dans les résultats de la recherche avec DuckDuckGo, cliquer à droite sur le bouton « Region » pour avoir des résultats en français.

Supprimer l'intégralité de l'historique, des cookies, … sauf les cookies de DuckDuckGo (pour notre réglage de langue).

$ sudo cp -r ~/.mozilla/ /etc/skel/

14.6. Gthumb

Cette visionneuse d'image apporte des fonctions de retouche et de conversion d'image basiques mais appréciables. Cependant, elle affiche par défaut des miniatures de toutes les photos du répertoire courant, ce qui est assez lourd. Lancer Gthumb et ouvrez une image, puis dans « Affichage » décocher « Panneau des vignettes ». Aller ensuite dans « Édition, Préférences » : Dans l'onglet « Visionneur », mettre la qualité du zoom à « Haute ». Dans l'onglet « Extensions » désactiver les extensions suivantes :

Valider puis relancer Gthumb. Dans l'arborescence à gauche se placer dans « Dossier personnel », et finalement ouvrir le menu « Aller à » pour « Supprimer l'historique ». Fermer Gthumb et copier les paramètres dans /etc/skel/ :

$ sudo mkdir /etc/skel/.config/dconf/
$ sudo cp ~/.config/dconf/user /etc/skel/.config/dconf

Note : dconf contient des paramètres pour de nombreuses applications (notamment la visionneuse PDF, l'outil de scan,…).

14.7. Suppression des répertoires « Images », « Téléchargements », …

Toujours pour que nos utilisateurs comprennent bien qu'il ne faut rien enregistrer en local, on ne veut pas que le système crée automatiquement des sous-dossiers « Images », « Téléchargements »,… dans le répertoire personnel des utilisateurs. Créer pour cela le fichier /etc/skel/.config/user-dirs.dirs avec le contenu suivant :

# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Bureau"
XDG_DOWNLOAD_DIR="$HOME/"
XDG_TEMPLATES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_DOCUMENTS_DIR="$HOME/"
XDG_MUSIC_DIR="$HOME/"
XDG_PICTURES_DIR="$HOME/"
XDG_VIDEOS_DIR="$HOME/"

Note : vous pouvez récupérer le fichier original dans ~/.config/user-dirs.dirs pour éviter de tout taper.

Finalement, pour éviter que nos fichiers « NE RIEN ENREGISTRER ICI* » n'apparaissent pas sur le bureau, et pour que les gens puissent se servir du bureau pour y mettre des fichiers temporairement, créer le répertoire « Bureau » dans /etc/skel/ :

$ sudo mkdir /etc/skel/Bureau

14.8. Applications par défaut

Dans les paramètres, ouvrir « Éditeur de type MIME ». Changer ensuite les associations entre type MIME et applications comme vous le désirez. Vu les logiciels que j'installe et que je supprime, je modifie les réglages pour les types MIMEs suivants : ogg, x-abiword, aac, ac3, x-flac-ogg, x-ms-wma, x-opus+ogg, x-speex+ogg, x-vorbis+ogg, bmp, gif, jpeg, png, tiff, mpeg, ogg, x-theora+ogg Une fois cela fait, copier le fichier suivant dans le profil par défaut :

$ sudo mkdir -p /etc/skel/.local/share/applications/
$ sudo cp ~/.local/share/applications/mimeapps.list /etc/skel/.local/share/applications/

14.9. Affecter les bons droits aux fichiers du profil

Il faut que les utilisateurs du domaine puissent lire tous les fichiers de /etc/skel/. Pour cela, taper les commandes suivantes :

$ sudo chmod 755 -R /etc/skel/.config
$ sudo chmod 744 /etc/skel/NE-RIEN-ENREGISTRER-ICI*
$ sudo chmod 755 -R /etc/skel/.mozilla
$ sudo chmod 755 -R /etc/skel/Bureau
$ sudo chmod 644 -R /etc/skel/.local

Fermer la session et essayer avec un nouveau compte.

15. Client OCS Inventory

Cette étape est complètement optionnelle.

15.1. Installation

$ sudo apt install ocsinventory-agent

Répondre aux questions :

15.2. Programmation

On décide ici de lancer le démon tous les 2 jours, 15 minutes après le démarrage de l'ordinateur, avec « anacron ». Éditer le fichier /etc/anacrontab et rajouter la ligne :

2	15	ocsinventory-agent	ocsinventory-agent

16. Nettoyage du système

Pour gagner un peu d'espace disque rapidement on peut lancer les deux commandes suivantes :

$ sudo apt-get autoremove
$ sudo apt-get clean

17. Clonage avec DRBL Live / Clonezilla

17.1. Avant le clonage

Sortir la machine du domaine :

$ sudo realm leave le.domaine --remove -U administrateur

17.2. Après le clonage

Se connecter en tant que localadmin.

Avec Network Manager (« Préférences, Connexions réseau »), supprimer la « Connexion filaire 1 » et configurer la « Connexion filaire 2 ».

Changer le nom de machine en éditant les fichiers /etc/hosts et /etc/hostname.

Redémarrer la machine.

Remettre la machine dans le domaine :

$ sudo realm join dc.le.domaine -U administrateur

Penser à remettre à « False » la directive suivante de /etc/sssd/sssd.conf

...
use_fully_qualified_names = False
...

Redémarrer la machine.

18. Problèmes restants

18.1. Carte graphique

Sur les Dell 740, un bug de la carte graphique de base (GeForce 6150 LE) peut empêcher d'arriver jusqu'à l'écran de connexion.

Pour contourner cela, ajouter ce paramètre dans /etc/default/grub à la fin de cette ligne :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.config=MvMSI=0"

18.2. Polices propriétaires

Il manque encore certainement des polices Windows ou leur équivalent libre.

18.3. Impressions lentes

Parfois les impressions semblent envoyées page par page, ce qui les ralentit beaucoup : on peut alors changer le fichier PPD utilisé pour l'imprimante, ou baisser la qualité d'impression par défaut.

18.4. NTP et Kerberos

J'ai constaté une fois, sous Debian, à l'authentification d'un élève un message du type : « impossible de créer un ticket Kerberos car l'heure varie trop par rapport au serveur ». Cependant l'authentification marchait et les répertoires partagés étaient montés. Effectivement, l'heure s'était décalée de 5 minutes pendant 3 semaines où ce poste était resté éteint. Ceci s'est solutionné tout seul au bout d'une ou deux heures le temps que NTP se re-synchronise. Il faudrait cependant s'assurer que cette synchronisation se fasse au démarrage de l'ordinateur. On pourrait peut-être avec anacron lancer ntpdate une minute après le démarrage de la machine.

18.5. DNS

En suivant cette procédure, le poste Linux ne créera pas d'enregistrement DNS sur le contrôleur de domaine (ça n'a pas gêné le fonctionnement et l'administration dans mon cas).


Par Yvan Masson, dernière modification le 07-11-2015

Licence Creative Commons BY-SA 3.0 Écrit avec un clavier BÉPO Rédigé en txt2tags Valid HTML 4.0 Transitional CSS Valide