Aller au contenu

Linux : dossier temporaire par utilisateur

En voyant les propos de https://sebsauvage.net/links/?68lT_w, il m'est venu l'idée de faire quelque chose de similaire.

Le but : prendre l'habitude d'utiliser un dossier temporaire (tmp) pour certains travaux nécessitant de conserver des fichiers le temps d'un travail, en sachant que son contenu ne sera pas perduré dans le temps.

Il me servira en premier lieu de dossier de téléchargement, et on verra pour la suite.

Besoin

Si sebsauvage évoque une solution en RAM (dont le contenu est supprimé au redémarrage), je tenais plutôt à un comportement où les fichiers sont gardés sur le disque pendant quelques jours — principe proche de /tmp (10 jours) et /var/tmp (30 jours).

J'ai surtout dans l'idée de remplacer le dossier Downloads/Téléchargement de mon home par ce dossier temporaires. J'aurais simplement pu mettre en place un processus de nettoyage sur ces dossiers existants, mais un nom mentionnant explicitement le côté temporaire me semblait préférable.

Pourquoi ne pas utiliser directement /tmp ? Il me semblait préférable de rester sur des dossiers spécifiques à chaque utilisateur, donc dans leur home : c'est leurs téléchargements personnels et leurs fichiers de travail.

Fonctionnalités

Fonctionnalités générales :

  • créé le dossier /home/$USER/tmp ;
  • ajoute une règle à /etc/tmpfiles.d afin de nettoyer dans ce dossier les fichiers de plus de 30 jours ;
  • définir ce dossier comme "dossier de téléchargement" par défaut de l'utilisateur (XDG_DOWNLOAD_DIR) ;
  • droits d'accès au dossier en 1770 (plutôt que 1777 comme /tmp) pour éviter que d'autres utilisateurs viennent fouiller dedans.

Fonctionnalités propres à Linux Mint (LMDE, dans mon cas) :

  • remplacer les raccourcis de Nemo pour supprimer Downloads, Téléchargement et ajouter tmp

Script bash

#!/bin/bash

user_home="$HOME"
tmp_dir="$user_home/tmp"

# Ajout de la règle tmpfiles.d
# d pour créer un répertoire qui sera nettoyé régulièrement
# 1770 : droits sur le dossier
# $USER $USER : propriétaire et groupe
# 30d : fichiers virés au bout de ce délai
echo "d $tmp_dir 1770 $USER $USER 30d" | sudo tee "/etc/tmpfiles.d/${USER}_tmp.conf" > /dev/null

# Appliquer les modifications avec tmpfiles
sudo systemd-tmpfiles --clean --create

# Modifier le fichier user-dirs.dirs pour rediriger "Téléchargements" vers "tmp"
user_dirs_file="$user_home/.config/user-dirs.dirs"
sed -i "s|^XDG_DOWNLOAD_DIR=.*|XDG_DOWNLOAD_DIR=\"\$HOME/tmp\"|" "$user_dirs_file"

# Appliquer immédiatement le changement dans la session en cours
source "$user_dirs_file"

# Chemin du fichier des favoris GTK (utilisé par Nemo)
bookmarks_file="$user_home/.config/gtk-3.0/bookmarks"

# Chemin absolu encodé des dossiers Téléchargements ou Downloads
downloads_dir="file://$user_home/T%C3%A9l%C3%A9chargements Téléchargements"
downloads_dir_alt="file://$user_home/Downloads Downloads"

# Supprimer "Téléchargements" ou "Downloads" des favoris s'ils existent
# et "tmp" pour éviter les doublons
sed -i "\|$tmp_dir|d" "$bookmarks_file"
sed -i "\|$downloads_dir|d" "$bookmarks_file"
sed -i "\|$downloads_dir_alt|d" "$bookmarks_file"

# Ajouter "tmp" en début de fichier
sed -i "1i file://$tmp_dir tmp (Downloads)" "$bookmarks_file"

# Redémarrer Nemo
killall nemo

Ça m'a été bien utile. De plus, Je tends à scripter toute configuration pour la reproduire lors de prochaines installations.

Comme c'est prêt à l'emploi, ça pourra peut-être resservir à d'autres, donc je partage.

Keep calm and script EVERYTHING!