cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

Le partage natif de fichiers entre une machine Android (un téléphone) et une machine sous Linux fonctionne plutôt bien, il est cependant assez lent, n’est pas complètement intégré au système (accès depuis un terminal) et n’aime pas vraiment les accès concurrents (par exemple copie d'une arborescence du téléphone, et navigation d'une autre en parallèle).

Ici, nous allons voir une alternative corrigeant ces problèmes et d’autres.



Les remarques préliminaires sont valables au moins aussi pour Windows, mais je pense qu’il s’agit d’une limitation du protocole utilisé et donc présent quel-que-soit le système.

Le titre de ce billet pourrait-être :

Comment transférer des fichiers entre Linux et Android ?

Pour accéder au téléphone nous allons utiliser sshfs côté Linux et 🐻 SimpleSSHD côté Android.

Pour une bonne intégration au système Linux interface graphique comprise, le point de montage doit se trouver dessous le dossier /media. Vous pouvez utiliser un dossier dessous /media/${USER} par exemple /media/${USER}/phone mais cela peut entrer en conflit avec l’automatisation de l’interface graphique.

Dans le cas d’un Linux sans interface graphique, il n’y a pas vraiment de contrainte.

Compte tenu de ces éléments, je vous propose de créer le point de montage sur le dossier /media/${USER}#mount-ssh/phone.

On va d'abord créer le dossier /media/${USER}#mount-ssh et pour cela les droits root sont requis :

sudo mkdir -vp "/media/${USER}#mount-ssh"

Pour ne pas avoir besoin d’utiliser sudo à chaque fois que vous monter ou démonter votre téléphone sur votre système, on va changer le propriétaire de ce répertoire :

sudo chown "${USER}:${USER}" "/media/${USER}#mount-ssh"

On pourra par la suite créer des répertoires dessous pour chaque appareil et faire le montage sans les droits administrateurs.

Voici une fonction qui implémente la création et le montage :

function mount_phone {
  local -r _ip_="$1"
  local -r _port_="${2:-2222}"
  local -r _localdir_="${3:-android-phone}"
  local -r _localdir_base_="${4:-/media/${USER}#mount-ssh}"

  local -r _localdir_path_="${_localdir_base_}/${_localdir_}"

  mkdir -vp "${_localdir_path_}" || return $?

  (
    set -x
    mount -v -t sshfs -o port="${_port_}" --read-write "user@${_ip_}:/sdcard/" "${_localdir_path_}"
  ) || return $?
}

Qui s’utilise comme suit :

mount_phone IP [PORT] [DIRNAME] [BASENAME]

Les valeurs par défaut correspondent à la ligne :

mount_phone IP 2222 'android-phone' "/media/${USER}#mount-ssh"

Voici une fonction pour l'opération inverse:

function umount_phone {
  local -r _localdir_="${1:-android-phone}"
  local -r _localdir_base_="${2:-/media/${USER}#mount-ssh}"

  local -r _localdir_path_="${_localdir_base_}/${_localdir_}"

  (
    set -x
    umount "${_localdir_path_}"
  ) || return $?

  rm -d -v "${_localdir_path_}" || return $?
}

Qui s’utilise comme suit :

umount_phone [DIRNAME] [BASENAME]

Les valeurs par défaut correspondent à la ligne :

umount_phone 'android-phone' "/media/${USER}#mount-ssh"


Exemple concret pour monter deux téléphones en même temps

  • On monte le 1er téléphone sur le point de montage par défaut :
mount_phone 192.168.2.72

Vous verrez apparaître un périphérique nommé android-phone et accessible depuis /media/claude#mount-ssh/android-phone.

On monte le second téléphone sur le point de montage android-phone2 :

mount_phone 192.168.1.73 '' android-phone2 # ici le '' indique qu'on garde la valeur par défaut pour le port

Vous verrez apparaître un périphérique nommé android-phone2 et accessible depuis /media/claude#mount-ssh/android-phone2.

Le démontage se fera comme suit pour le 1er téléphone :

umount_phone

Pour le second :

umount_phone android-phone2


Remarques

  • Ces points de montage ne résistent pas au reboot de l’un des deux périphériques.
  • De manière en cas de rupture prolongée de la connexion, le point de montage saute.


Liens

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog