Présentation
Le but est de décrire l'utilisation de la partition windows contenant le logiciel pour stocker ses données Ubuntu.
Souvent lors d'une cohabitation entre Windows et Ubuntu, une des difficultés que l'on rencontre est l'accès commun aux données pour les deux systèmes.
En effet, Windows ne sachant pas nativement lire les partitions EXT4 d'Ubuntu, vous ne pourrez pas, à partir d'un Windows, accéder à vos données stockées sur une partition Ubuntu. Il est donc nécessaire:
- Soit de stocker les données utilisateur dans une partition commune.
- Soit de stocker directement les données au même endroit que windows les stocke le plus fréquemment qui est le C: déjà existant.
Cet article va traiter ce dernier cas. Il est testé dans le contexte suivant Ubuntu 24.04 et windows 10 non chiffré.
L'utilisation de ce tuto nécessite la maîtrise du terminal et du copier/coller. Il est possible aussi de consulter ce lien.
Une bonne connaissance des autorisation d'accès aux fichiers est un plus
Les diverses étapes sont décrites ci-après dans le contexte suivant: un administrateur ubuntu ayant un nom différant de l'administrateur windows et facultativement deux utilisateurs standards ayant des noms identiques entre windows et ubuntu. Ce qui n'est pas obligatoire mais simplifie la compréhension.
Contexte mono_utilisateur.
C'est le cas simple où il n'existe qu'un seul utilisateur.
Il faut d'abord vérifier que l'utilisateur est bien référencé avec le n° 1000 en frappant la commande id.
On monte la partition windows en disant que l'utilisateur est propriétaire de l'ensemble des données en ajoutant la description de la partition windows dans le fichier /etc/fstab, en créant le point de montage et en exécutant le montage.
Exemple avec un windows ayant une étiquette "windows1".
echo /dev/disk/by-label/Windows1 /media/Windows1 ntfs3 defaults,auto,nofail,force,windows_names,uid=1000,gid=1000 0 0 | sudo tee -a /etc/fstab sudo mkdir -v /media/Windows1 udisksctl mount -b /dev/disk/by-label/Windows1 df -htntfs3
C'est quasiment fini.
Contexte Multi-utilisateur.
Le contexte développé est le suivant: Chaque utilisateur a le droit de lire les documents de la famille. Quiconque n'appartenant pas à la famille, n'a aucun droit!
Création de la famille d'utilisateurs
sudo addgroup famille sudo adduser a famille # l'utilisateur a est l'administrateur ubuntu. sudo adduser enfant1 famille sudo adduser enfant2 famille
On monte la partition windows en disant que root est propriétaire de l'ensemble en ajoutant la description de la partition windows dans le fichier /etc/fstab, en créant le point de montage et en exécutant le montage. Exemple avec un windows ayant une étiquette "windows1".
echo /dev/disk/by-label/Windows1 /media/Windows1 ntfs3 defaults,auto,nofail,force,windows_names 0 0 | sudo tee -a /etc/fstab sudo mkdir -v /media/Windows1 udisksctl mount -b /dev/disk/by-label/Windows1 df -htntfs3
Installer les permissions.
Le problème embêtant est que si on définit une bonne fois pour toutes les autorisations, les nouveaux fichiers qui seront créés sous le contrôle de windows, ne seront pas intégrés dans ces autorisations et resteront la propriété de root.
il est donc nécessaire de fabriquer un service système qui affectera les bonnes permissions pour la totalité des fichiers existants à chaque démmarrage de ubuntu.
Solution simple
Chaque utilisateur ubuntu accède à la totalité de ses répertoires windows et en lecture à tous les fichiers des autres utilisateurs.
sudo su -c 'cat <<EOF>/etc/systemd/system/Appairage.service [Unit] Description=Appairage des utilisateurs. After=multi-user.target [Service] ExecStartPre=chown -R enfant1:famille /media/Windows1/Users/enfant1 ExecStartPre=chmod -R 750 /media/Windows1/Users/enfant1 ExecStartPre=chown -R enfant2:famille /media/Windows1/Users/enfant2 ExecStartPre=chmod -R 750 /media/Windows1/Users/enfant2 ExecStartPre=chown -R a:famille /media/Windows1/Users/franc ExecStartPre=chmod -R 750 /media/Windows1/Users/franc ExecStartPre=chmod -R 777 /media/Windows1/Public ExecStart=echo Appairage réussi. [Install] WantedBy=multi-user.target EOF'
Solution avec un script
Permet de n'autoriser que quelques répertoires.
sudo su -c 'cat <<EOF>/etc/systemd/system/Appairage.service [Unit] Description=Appairage des utilisateurs. After=multi-user.target [Service] ExecStart=bash /home/a/Appairage.sh ExecStartPost=echo Appairage réussi. [Install] WantedBy = multi-user.target EOF'
On définit les répertoires habituels. On peut ne pas prendre tous les répertoires de cette liste.
cat <<'EOF'>$HOME/Appairage.sh #!/bin/bash PDM=/media/Windows1/Users #Point de montage de la partition windows Appairer () { chown $1:famille $PDM/$2 chmod 750 $PDM/$2 chown -R $1:famille $PDM/$2/{Desktop,Documents,Downloads,Music,Pictures,Videos} chown $1:famille $PDM/$2/AppData chown $1:famille $PDM/$2/AppData/Roaming chown $1:famille $PDM/$2/AppData/Roaming/Microsoft chown $1:famille $PDM/$2/AppData/Roaming/Microsoft/Windows chown -R $1:famille $PDM/$2/AppData/Roaming/Microsoft/Windows/Templates chmod -R 750 $PDM/$2/{Desktop,Documents,Downloads,Music,Pictures,Videos} chmod -R 750 $PDM/$2/AppData/Roaming/Microsoft/Windows/Templates } Appairer enfant1 enfant1 # Utilisateur ubuntu Puis Utilisateur windows Appairer enfant2 enfant2 # Utilisateur ubuntu Puis Utilisateur windows Appairer a franc # Utilisateur ubuntu Puis Utilisateur windows # Traiter le répertoire Public..... chmod -R 777 $PDM/Public EOF sleep 1 sudo chmod +x $HOME/Appairage.sh # Autoriser l'exécution du fichier.
Tester le service
systemctl stop Appairage.service && systemctl daemon-reload && systemctl enable Appairage.service && systemctl start Appairage ls -l /media/Windows1/Users ls -l /media/Windows1/Users/enfant1 | grep " enfant" ls -l /media/Windows1/Users/enfant2 | grep " enfant" ls -l /media/Windows1/Users/franc | grep " a" echo test>/media/Windows1/Users/franc/AppData/Roaming/Microsoft/Windows/Templates/test.txt echo test>/media/Windows1/Users/enfant1/AppData/Roaming/Microsoft/Windows/Templates/test.txt head -1 /media/Windows1/Users/enfant1/Downloads/desktop.ini
Rebooter et vérifer l'exécution
journalctl --no-pager -b -g appairage systemctl status Appairage
Reste à la charge de chaque utilisateur
On peut ne pas prendre tous ces répertoires.
La création des redirections standards et leurs figeages.
USER2=$USER #Dans le cas où les deux noms sont identiques ou, dans le cas contraire il faut préciser le nom windows: USER2=franc PDM=/media/Windows1/Users xdg-user-dirs-update --set DESKTOP $PDM/$USER2/Desktop xdg-user-dirs-update --set DOCUMENTS $PDM/$USER2/Documents xdg-user-dirs-update --set PICTURES $PDM/$USER2/Pictures xdg-user-dirs-update --set MUSIC $PDM/$USER2/Music xdg-user-dirs-update --set DOWNLOAD $PDM/$USER2/Downloads xdg-user-dirs-update --set VIDEOS $PDM/$USER2/Videos xdg-user-dirs-update --set TEMPLATES $PDM/$USER2/AppData/Roaming/Microsoft/Windows/Templates xdg-user-dirs-update --set PUBLIC $PDM/Public cp -nv /etc/xdg/user-dirs.conf $HOME/.config && sed -i 's/True/False/' $HOME/.config/user-dirs.conf
Le basculement des fichiers standards
cp -vru $HOME/Documents/* $PDM/$USER2/Documents && rm -rv $HOME/Documents && ln -s $PDM/$USER2/Documents $HOME/Documents cp -vru $HOME/Images/* $PDM/$USER2/Pictures && rm -rv $HOME/Images && ln -s $PDM/$USER2/Pictures $HOME/Images cp -vru $HOME/Musique/* $PDM/$USER2/Music && rm -rv $HOME/Musique && ln -s $PDM/$USER2/Music $HOME/Musique cp -vru $HOME/Vidéos/* $PDM/$USER2/Videos && rm -rv $HOME/Vidéos && ln -s $PDM/$USER2/Videos $HOME/Vidéos cp -vru $HOME/Téléchargements/* $PDM/$USER2/Downloads && rm -rv $HOME/Téléchargements && ln -s $PDM/$USER2/Downloads $HOME/Téléchargements cp -vru $HOME/Bureau/* $PDM/$USER2/Desktop && rm -rv $HOME/Documents & sleep 1 ; ln -s $PDM/$USER2/Desktop /$HOME/Documents cp -vru $HOME/Public/* $PDM/Public && rm -rv $HOME/Public & sleep 1 ; ln -s $PDM/Public $HOME/Public cp -vru $HOME/Modèles/* $PDM/$USER2/AppData/Roaming/Microsoft/Windows/Templates && rm -rv $HOME/Modèles && ln -s $PDM/$USER2/AppData/Roaming/Microsoft/Windows/Templates $HOME/Modèles ls -Ll $HOME/Public