Title: Utiliser Gio en ligne de commande
Category: sysadmin
Tags: pl-fr, GIO, fichiers, terminal
Date: 2019-04-25 1:30
Status: published

J'ai depuis quelques mois décidé de changer radicalement ma façon d'utiliser mon
ordinateur : je veux aller au plus simple, rapide et sans fioritures. Fini
l'environnement de bureau **Gnome** et bonjour utilisation plus intensive
des applications en ligne de commande ou en version *"terminal"*.

J'ai aussi choisi de me passer des services d'un gestionnaire de fichiers et
d'utiliser exclusivement mon émulateur de terminal pour gérer mon
arborescence : pour l'instant j'en suis ravi. Il y a cependant un point qui
peut très vite coincer : Un gestionnaire de fichiers moderne permet le **montage
automatique des périphériques USB** ou encore le montage facile **des ressources
réseaux** et enfin **le montage par les utilisateurs non privilégiés du
système**.

Bien sûr je ne veux pas utiliser le montage automatique, mais pour tout le reste
il est possible d'utiliser `gio`, la librairie issu du projet Gnome et utilisée
pour les montage de périphériques de stockage.

## Commençons simple, un disque USB

Le premier cas que nous allons étudier, et le plus simple, est celui de la clé
USB. Bien entendu il fait avoir installé Gio, sur Archlinux :

```console
pacman -S gvfs
```

Une fois la clé branchée il suffira de trouver le périphérique représentant
notre support dans `/dev/` et la partition que l'on veux monter avec `lsblk`

```console
lsblk
sda                  8:0    1  14,5G  0 disk
└─sda1               8:1    1  14,5G  0 part
nvme0n1            259:0    0   477G  0 disk
[...]
```
Dans l'exemple, je veux utiliser ma clé `/dev/sda1`

```console
gio mount -d /dev/sda1
/dev/sda1 a été monté sur /run/media/ephase/MaCle
```

`-d <device>` indique le périphérique de block à monter. La commande retourne le
dossier ou le périphérique est monté.

Pour démonter le périphérique, il suffira de faire 

```console
gio mount -u /run/media/ephase/MaCle
```

Attention, si la commande retourne le message
`gio:file:///run/media/ephase/MaCle: Un ou plusieurs programmes empêchent
l’opération de démontage.` il se pourrait que dans un de vos émulateurs de
terminal lancés le répertoire courant soit celui de votre montage (ou de ses
sous répertoires).

## Monter un dossier via ssh

La commande n'est pas très compliquée mais le point de montage est un peu moins
simple à trouver et cette fois la commande ne le retourne pas le point de
montage. Bonne nouvelle tout de même : `gio` prend en compte les fichiers
`~/.ssh/config` et sait utiliser les clefs.

```console
gio mount ssh://myhost.com
Saisissez la phrase de passe de la clé SSH de myhost.com
Password:
```

Le point de montage est un sous-dossier de `/run/users/<uid>/gvfs/` où `<uid>`
est celui de votre utilisateur, dans le cas ci-dessus : 

```console
tree
/run/user/1000/gvfs
└── sftp:host=myhost.com
    └── mon_dossier
```

Le démontage est simple : 

```console
gio mount -u ssh://myhost.com
```

La commande s'applique pour toute ressource `smb`, `nfs`, `afp`. Il faut tout de
même penser à installer les **modules gio correspondant** : `gvfs-smb`,
`gvfs-nfs` et `gvfs-afp`.

## Monter un périphérique MTP

Dernier cas étudié : le [MTP][l_mtp_w], c'est le protocole de communication
utilisé notamment par les téléphones Android. Il faut là aussi installer un
paquet pour que tout fonctionne, sous Archlinux `gvfs-mtp`. La commande est plus
complexe :

```console
gio mount -li | awk -F= '{if(index($2,"mtp") == 1)system("gio mount "$2)}'
```

`gio mount -li` donne des informations détaillées sur les périphériques
disponibles. Il suffit de passer le tout à `awk`, d'utiliser le séparateur `=`
et de chercher la présence de `mtp` dans la seconde colonne et si c'est le cas
d'exécuter `gio mount`.

Cette commande réalisera un montage de **tous** les périphériques *MTP* 
disponibles sans distinction, il vous faudra l'adapter en fonction de vos
besoins.

Comme pour les protocoles réseaux, la commande ne retourne rien et le point de
montage est un sous dossier de `/run/users/<uid>/gvfs`.

Pour le démontage, soit nous connaissez l'URI du périphérique (du style
`mtp://Android_ae45f6`) et il suffit de faire :

```console
gio mount -u mtp://Android_ae45f6
```

Sinon il est possible de donner le point de montage à la commande `gio` : 

```console
gio mount -u /run/users/1000/mtp:Android_ae45f6
```

## En conclusion

Utiliser exclusivement l'émulateur de terminal pour gérer les fichiers est, de
mon point de vue, simple et bigrement efficace. Avec `gio` c'est juste parfait :
peu de dépendances, rapide et facile à utiliser. Il est aussi possible
d'utiliser [udevil][l_udevil], mais ce projet semble au point mort (pas de mise
à jour ou correction de bug depuis juillet 2017).

[l_mtp_w]:https://fr.wikipedia.org/wiki/Media_Transfer_Protocol
[l_udevil]:https://github.com/IgnorantGuru/udevil/
