Zugriff auf das Smartphone unter Linux
 

Heutige Smartphones auf Android Basis verwenden zur Datenübertragung via USB-Kabel zum Rechner das MTP-Protokoll. Das Media Transfer Protocol (MTP) ist ein Netzwerkprotokoll zur Übertragung von Dateien zwischen mobilen Endgeräten (wie z. B. Smartphones) und PCs. Es ist eine Weiterentwicklung des Picture Transfer Protocol und wurde von Microsoft und Canon entwickelt. Während Linux das UMS-Protokoll (USB-Massenspeicher) von Haus aus unterstützt, muß für das MTP-Protokoll ein eigener Treiber installiert werden oder Software, welche das Protokoll unterstützt. Es wäre ja zu schön und zu einfach gewesen wenn sich das Smartphone wie ein gewöhnlicher USB-Stick verhält, einfach an den Rechner angestöpselt werden könnte um beliebig Dateien hin und her zu schieben. Aber so ist es halt wie mit vielem im Leben, alles hat seine Vor- und Nachteile.

Vorteile:

  • Das Gerät kann ohne vorheriges Abmelden ("Auswerfen") vom System abgezogen werden, da Schreibvorgänge nicht zwischengespeichert ("gepuffert"), sondern sofort ausgeführt werden.
  • Der Hersteller kann beliebige Dateisysteme auf dem Gerät verwenden.
  • Mit dem PC können Wiedergabelisten für den Player erstellt werden.
  • Der Funktionsumfang des Gerätes wird kaum gestört, da das Gerät gleichzeitig mit dem Computer auf denselben Speicher zugreifen kann.

Nachteile:
  • Es ist kein direkter Zugriff auf das Dateisystem möglich.
  • Das Protokoll wird nicht von älteren Betriebssystemen unterstützt.
  • Die MTP-Software unterstützt meist nicht alle Funktionen und Formate, die das Gerät bietet, bzw. hat Probleme beim Konvertieren.
  • Die Übertragung via MTP ist meist deutlich langsamer als beim USB-Massenspeicher-Zugriff.
Wie man sieht, gibt es genauso viele Vorteile wie Nachteile, wobei nach meinem Geschmack die Nachteile sogar überwiegen. Da stellt sich doch die Frage, warum nur verwendet man dann das MTP-Protokoll und nicht das UMS-Protokoll was den Zugriff erheblich erleichtern und beschleunigen würde? Das wird wohl ein Geheimnis der Smartphone Hersteller bleiben. Fakt ist, daß die Unterstützung in älteren Linux-Systemen entweder gar nicht oder "nur vom Handy lesbar" vorhanden war. Glücklicherweise hat sich da mittlerweile einiges getan und mit Stand Heute 20.10.2024 muß ich feststellen, daß man nicht nur unter KDE mittels des Konquerors bequem lesend und schreibend auf das Smartphone zugreifen kann, sondern auch von der Kommandozeile aus in dem man das Smartphone in das Dateisystem einbindet. Noch dazu gibt es unter KDE das sogenannte "KDE Connect" welches eine Verbindung herstellen kann, wenn sich das Smartphone im selben W-LAN Netzwerk befindet. Leider hat KDE Connect einen für mich gravierenden Nachteil und ist daher nicht mein Favorit für eine Verbindung zum Smartphone:

Vorteile von KDE Connect

  • Es wird kein Kabel benötigt. Das Smartphone und der PC müssen lediglich im selben W-LAN Netz sein.
Nachteile von KDE Connect
  • Es muß eine App auf dem Smartphone installiert werden und die entsprechenden Verzeichnisse frei gegeben werden.
  • Die Geschwindigkeit beim Übertragen von Daten ist sehr langsam.
Der letzte Punkt ist meinem Empfinden nach der gravierende Nachteil, da die Geschwindigkeit beim Übertragen von Daten so unsagbar langsam ist, daß es eine echte Geduldsprobe ist zu warten, bis Dateien übertragen sind oder auch nur das Inhaltsverzeichnis aufgebaut wird. Daher empfehle ich kdeconnect nur, wer genügend Geduld mitbringt und kein Kabel verwenden möchte. Als Vorarbeit muß man die App installieren und mittels der App Verzeichnisse auf dem Smartphone für den Zugriff freigeben. Unter dem Konqueror mittels kdeconnect:/ kann man dann auf die freigegebenen Verzeichnisse zugreifen.

Wegen des angesprochenen Mangels an Geschwindigkeit ist meine Empfehlung für den Zugriff auf ein Smartphone unter Debian und einer KDE-Oberfläche eine Verbindung mittels USB-Kabel und folgende Programme:

  • Der konqueror und die simple Eingabe von mtp:/ in der Adresszeile.
  • jmtpfs - ein Programm für die Kommandozeile um ein Smartphone in den Verzeichnisbaum einzuhängen. jmtpfs ist unter Linux-Systemen weit verbreitet.
  • go-mtpfs - ebenfalls ein Programm für die Kommandozeile um ein Smartphone in den Verzeichnisbaum einzuhängen, jedoch etwas stabiler und schneller als jmtpfs und damit mein Favorit auf der Konsole.
Damit das mtp-Protokoll überhaupt unterstützt wird, muß man mindestens das Paket libmtp9 installieren. Ich empfehle allerdings noch zusätzlich folgende Pakete:
# apt-get install libmtp9 mtp-tools kio-mtp

Noch ein wichtiger Hinweis: Nach anschließen des USB-Kabels muß das Smartphone entsperrt werden und die Verbindung zugelassen werden!

Die mtp-tools bringen ein paar nützliche Befehle mit, mit denen man nachschauen kann, ob das Smartphone überhaupt erkannt wurde:
$ mtp-detect       # listet die mtp-devices auf

Um nun mittels jmtpfs oder go-mtpfs das Smartphone in den Verzeichnisbaum einzuhängen, muß man erstmal das jeweilige Programm installieren. Dabei verwendet man für jmtpfs
# apt-get install jmtpfs
und für go-mtpfs
# apt-get install go-mtpfs

Dann muß man noch einen entsprechenden Ordner anlegen und ihm die Rechte zum einhängen geben.
# mkdir /mnt/android
# chmod 777 /mnt/android

Anschließend kann man je nach verwendetem Programm das Smartphone einhängen:
$ jmtpfs /mnt/android
oder
$ go-mtpfs /mnt/android

Möchte man das Smartphone wieder aushängen geht das mittels fusermount -u:
$ fusermount -u /mnt/android

Dabei ist zu beachten, daß sich go-mtpfs etwas anders verhält als jmtpfs. Wird mittels go-mtpfs das Smartphone eingehängt, blockiert die Ausführung des Programms die Konsole, d.h. man muß erst mit STRG-C das Programm beenden, bevor man das Smartphone wieder aushängen kann. Weiter ist zu beachten, daß das Beenden mittels STRG-C NICHT die Verbindung auftrennt. Da das Programm aber nicht läuft, kann auch nicht auf das Smartphone zugegriffen werden. Entsprechende Zugriffsversuche bringen folgende Fehlermeldung:
$ ls -l /mnt/android/
ls: Zugriff auf '/mnt/android/' nicht möglich: Der Socket ist nicht verbunden

Daher meine Empfehlung falls man go-mtpfs verwendet: Das Programm im Hintergrund ausführen.
$ go-mtpfs /mnt/android &
Wird nun das Verzeichnis mittels fusermount -u /mnt/android wieder ausgehängt, wird auch automatisch go-mtpfs im Hintergrund wieder beendet. Trotz dieser kleinen Umständlichkeit ist go-mtpfs immer noch mein Favorit, da es angeblich stabiler und schneller ist.


IPhone unter Linux

Der Zugriff auf ein iPhone ist etwas komplizierter, da Apple-Geräte ein anderes Protokoll verwenden. Statt MTP verwendet das iPhone ein Protokoll namens
AFC (Apple File Conduit), welches über USB kommuniziert wird. Um auf ein iPhone zugreifen zu können, benötigt man folgende Pakete:
# apt-get install libimobiledevice6 ifuse

libimobiledevice6 = Diese Bibliothek ermöglicht den Zugriff auf iOS-Geräte.
ifuse = Ein FUSE-basiertes Dateisystem, das den Zugriff auf das iPhone-Dateisystem ermöglicht.

Nach der Installation dieser Pakete kann man das iPhone mit dem Befehl ifuse mounten und auf das Dateisystem zugreifen. Allerdings funktioniert der direkte Zugriff über Konqueror nicht immer so reibungslos wie bei MTP-Geräten. Es ist eher üblich, dass iPhones direkt über die Konsole verwaltet werden. Ansonsten sind die Schritte zum Einbinden ziemlich ähnlich wie die bei jmtpfs und go-mtpfs.

Zuerst wieder ein Verzeichnis erstellen und die enstprechenden Rechte vergeben:
# mkdir /mnt/iphone
# chmod 777 /mnt/iphone

Dann das IPhone mounten:
$ ifuse /mnt/iphone

Natürlich muß man beachten, daß wie bei Android das iPhone entsperrt sein muss und die Verbindung zugelassen werden muß um den Zugriff zu gewähren. Ist man mit dem Kopieren der Dateien fertig, kann man mittels des folgenden Befehls das IPhone wieder aushängen:
$ fusermount -u /mnt/iphone


Fotos im IPhone (HEIC-Dateien)

Fotos werden wie bei Android auf dem IPhone im Ordner DCIM gespeichert. DCIM steht für "Digital Camera Images", ein Standardverzeichnisname für Kameras, Smartphones und andere Geräte, die Fotos aufnehmen. Allerdings gibt es da einen großen Unterschied zwischen Android und IPhones. Android speichert sämtliche Bilder und Videos in einem einzigen Ordner, während das IPhone jede Menge Unterordner anlegt. Diese Ordner sind typischerweise nummeriert und haben Namen wie 100APPLE, 101APPLE, 102APPLE usw. Diese Struktur stammt aus den Konventionen des DCF-Standards (Design rule for Camera File system), der für die Verwaltung von Bildern auf digitalen Kameras entwickelt wurde.

Dabei wird beim Speichern von Bildern unter Android in der Regel das JPG-Format verwendet, während Apple verschiedene Formate verwenden kann. Neben dem JPG-Format kann auch im PNG-Format oder im HEIC-Format gespeichert werden. HEIC steht für High Efficiency Image Format und ist ein moderner Bilddateistandard, der von der Moving Picture Experts Group (MPEG) entwickelt wurde. HEIC-Dateien verwenden die HEVC-Kompression (High Efficiency Image Coding), auch bekannt als H.265.

Eigenschaften von HEIC-Bildern:

  • Kleinere Dateigröße: HEIC-Dateien sind deutlich kleiner als JPEG-Dateien, ohne die Bildqualität merklich zu beeinträchtigen. Dadurch spart man Speicherplatz auf dem Gerät.
  • Bessere Bildqualität: Trotz der kleineren Dateigröße behalten HEIC-Bilder eine höhere Bildqualität im Vergleich zu JPEG, insbesondere bei komplexen Szenen mit vielen Farben.
  • Unterstützung für mehrere Bilder: Eine HEIC-Datei kann mehrere Bilder speichern. Dies ist nützlich für Funktionen wie Live Photos auf dem iPhone, bei denen ein kurzes Video zusammen mit einem Foto gespeichert wird.
  • Zusätzliche Bildinformationen: HEIC-Dateien können neben den Bilddaten auch Informationen wie Transparenz (Alpha-Kanal), Bildbearbeitungen oder EXIF-Daten effizient speichern.

Warum verwendet Apple HEIC?

Apple hat das HEIC-Format mit der Veröffentlichung von iOS 11 und macOS High Sierra eingeführt, um die Effizienz der Bildspeicherung zu verbessern. Da HEIC Bilder in hoher Qualität mit geringem Speicherbedarf speichert, ist es besonders vorteilhaft für Geräte mit begrenztem Speicherplatz wie Smartphones.

Kompatibilität:

  • Auf modernen iOS- und macOS-Geräten werden HEIC-Dateien nativ unterstützt.
  • Windows 10 und höher unterstützt HEIC-Dateien, allerdings muss manchmal das HEIF- und HEVC-Erweiterungspaket aus dem Microsoft Store installiert werden.
  • Andere Plattformen wie Linux: Manche ältere Geräte oder Software unterstützen das HEIC-Format möglicherweise nicht nativ. In solchen Fällen kann es nötig sein, HEIC-Dateien in ein anderes Format wie JPEG zu konvertieren.
Was die Linux Unterstützung anbelangt, ich habe es nicht geschafft HEIC-Dateien mittels gwenview unter Debian bullseye zu öffnen, unter Debian bookworm schon. Alle Empfehlungen im Internet entsprechende Pakete für die Unterstützung zu installieren, haben nichts gebracht. Trotzdem kann man gerne versuchen folgende Pakete zu installieren:
# apt-get install libheif1
# apt-get install kimageformat
Das letztere Paket gibt es unter bullseye nicht, aber dafür das Paket kimageformat-plugins. Leider brachte keines der beiden Pakete gwenview dazu, HEIC- oder auch HEIF-Dateien anzuzeigen.
Allerdings unterstützen beide Distributionen die Konvertierung von HEIC mittels des Imagemagick Pakets, daher können alle HEIC Dateien mittels mogrify oder convert in das JPG-Format konvertiert werden. Dabei ist zu beachten, daß HEIC Dateien auch mehrere Bilder also eine ganze Serie enthalten können. Standardmäßig konvertiert convert lediglich das erste Bild aus der Serie. Möchte man alle Bilder haben, kann man so vorgehen:

Wie man alle Bilder aus einer HEIC-Datei unter Linux extrahiert

Um alle Bilder einer HEIC-Datei zu konvertieren, muß man erst einmal ermitteln, wieviele Bilder die HEIC-Datei enthält. Das kann man sich mittels identify anzeigen lassen:
$ identify input.heic
input.heic[0] HEIC 4032x3024 4032x3024+0+0 8-bit sRGB 1.234MB 0.020u 0:01.000
input.heic[1] HEIC 4032x3024 4032x3024+0+0 8-bit sRGB 1.234MB 0.020u 0:01.000

In diesem Fall enthält die HEIC-Datei zwei Bilder (Index [0] und [1]). Mittels des Indexes kann man die entsprechenden Bilder genau wie bei einem Array in der Programmierung ansprechen, z.B.
$ convert input.heic[0] output1.jpg     # Erstes Bild
$ convert input.heic[1] output2.jpg     # Zweites Bild
$ convert input.heic[2] output3.jpg     # Drittes Bild

Möchte man automatisch alle Bilder auf einmal extrahieren, kann man folgendes Kommando nutzen:
$ convert input.heic output%d.jpg
Damit werden alle Bilder in der HEIC-Datei extrahiert und als output0.jpg, output1.jpg, output2.jpg usw. gespeichert.