Comment transférer des données, et en particulier les photos, entre un smarthpone Android et GNU/Linux ?

Nous avons exploré différentes solutions.

Le câble USB

La solution la plus simple et la plus rapide !

Branchez votre smartphone en USB, et sélectionnez le partage de fichiers. Le téléphone apparait au même endroit que les clefs USB et disques externes. Vous pouvez l’ouvrir dans l’explorateur de fichiers et copier, déplacer ou supprimer vos fichiers.

Sur certains smartphones, il faut aller dans la zone de notifications (en faisant glisser l’écran vers le bas en général) pour accéder à l’option Transfert de fichiers.

Le Bluetooth

Le bluetooth est une solution simple : il suffit d’appairer le téléphone avec le PC, puis de sélectionner les fichiers à transférer et de choisir partager puis bluetooth.

Ce n’est cependant pas très rapide, surtout pour de grosses quantités de données.

KDEConnect

La solution KDEConnect fonctionne sur un réseau wifi domestique et sur un partage de connexion. Il faut installer soit KDEConnect soit GSConnect sur le PC, suivant que vous utilisiez Gnome ou KDE. Si vous ne savez pas vous êtes probablement sous Gnome, donc GSConnect.

Il faut installer l’application KDEConnect sur le smartphone. Elle est disponible sur tous les magasins qui se respectent, comme F-Droid, et aussi sur ceux qui ne vous respectent pas, ni vous ni vôtre vie privée (suivez mon regard).

Exemple de KDEConnect : Capture d’écran de KDEConnect

Une fois les deux appareils équipés des applications nécessaires et connectés sur le même réseau wifi, la détection devrait être automatique.

KDEConnect propose plein de fonctionnalités géniales, comme afficher les notifications du smartphone sur le PC ou inversement, ou la transformation du smartphone en télécommande pour PC (pour les présentations par exemple).

Pour transférer des fichiers en masse, ouvrir l’appli sur le smartphone, choisir Envoyer des fichiers, sélectionner tous les fichiers et valider avec SÉLECTIONNER. Le téléchargement démarre sur le PC.

sftp sur wifi

Cette solution fonctionne à la fois sur un réseau wifi avec routeur (réseau wifi de la maison) ou en mode partage de connexion du téléphone. Le mode partage de connexion ne nécessite pas d’avoir un forfait de données, il s’agit simplement de connecter le PC sur un réseau wifi fournit par le smartphone.

Le sftp c’est une sorte de ftp (les commandes sont similaires, même si le protocole est tout à fait différent), mais sur ssh.

On installe donc un serveur sftp sur le smartphone, Primitive ftpd dans notre exemple, qui fait ftp et sftp, on le configure : nom d’utilisateur, mot de passe, puis on l’active.

IP du smartphone

Pour se connecter, il faut récupérer l’adresse ip du téléphone. Pour cela, sur le smartphone on peut regarder l’affichage de primitive ftpd, ligne wlan0.

Écran d’accueil de Primitive ftpd : Capture d’écran de Primitive ftpd montrant l’ip de wlan0

Autre solution, que nous allons utiliser, c’est de récupérer l’adresse du routeur par défaut sur le PC. Avec le partage de connexion, le routeur par défaut est le smartphone.

❯ ip route list default
default via 192.168.43.195 dev wlan0 proto dhcp src 192.168.43.138 metric 600

En utilisant les regex, on peut même récupérer directement l’adresse :

❯ ip route list default | grep -Po '(?<=via )\d+.\d+.\d+.\d+'
192.168.43.195

On utilisera cette commande plus tard pour automatiser les choses.

Premier test

À partir de là on peut essayer une première connexion en sftp :

❯ sftp -P 1234 user@192.168.43.195
The authenticity of host '[192.168.43.195]:1234' can't be established.
ED25519 key fingerprint is SHA256:xz1tsG9HGCZo+FTLliCrfm+FO/sCdnY//qSabC5d5lc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.43.195]:1234' (ED25519) to the list of known hosts.
Password authentication
(user@192.168.43.195) Password:
Connected to 192.168.43.195.
sftp> ls
Alarms Android DCIM Documents Download Movies Music Notifications Pictures Podcasts

La commande help de sftp permet d’afficher toutes les commandes disponibles.

On peut aussi tester la connexion avec un client graphique comme FileZilla.

Montage de filesystem

La force de GNU/Linux par rapport aux grosses bouses windows^W^W^W^Wà d’autres systèmes d’exploitation, c’est de faire des outils qui font une chose, qui le font bien, et de les réutiliser plus tard. C’est exactement ce qu’il s’est passé avec ssh et sftp, fuse et le principe de montage de dossiers : on peut se baser sur ces briques pour monter un dossier à travers une connexion sftp. Et c’est simple :

smartphone=$(ip route list default | grep -Po '(?<=via )\d+.\d+.\d+.\d+')
[ -d ~/smartphone ] || mkdir ~/smartphone
sshfs -p 1234 smartphone: ~/smartphone

Il suffit de donner le mot de passe (vide si on a activé les connexions anonymes) puis d’ouvrir le dossier ~/smartphone avec n’importe quel explorateur de fichiers.

Quand on a terminé, on peut démonter le dossier par l’interface graphique ou en tapant umount ~/smartphone.

Pour aller plus loin…

Il faut savoir que la commande sftp sous GNU/Linux prend un paramètre -b qui permet d’indiquer un script de commandes sftp.

On peut ainsi automatiser des copies ou des backups, avec cron ou un timer systemd qui appelle régulièrement un script sftp.