cifs-client 1.6

Beispielbild-Oberflaeche

Beschreibung: cifs-client ist ein von mir selbst geschriebenes kleines Programm in Qt für Linux, welches mittels smbclient und den cifs-utils freigegebene Windows-Ordner (hier als "Windows-Shares" bezeichnet) anzeigen und verwalten kann. Dabei erledigt cifs-client noch eine kleine nützliche Zusatzaufgabe: hängt man ein entferntes Windows Verzeichnis per Knopfdruck ein, wird alle 5 Minuten mittels des Befehls "touch" (touch aktualisiert entweder den Zeitstempel einer vorhandenen Datei oder legt eine leere Datei an, falls die angegebene nicht existiert) ein Signal an den Windows-Rechner geschickt um die Verbindung aufrecht zu erhalten.

Das Programm ist aus der Problematik entstanden, daß meine Verbindungen mittels cifs von einem Linux Rechner zu einem Windows Rechner nach ca. 15 Minuten in einen Schlafmodus gehen und aus diesem nicht mehr zurück zu holen sind. Sämtliche Versuche den eingehängten Ordner anzusprechen oder auszuhängen scheitern. Der cifs-Prozess wird zu einem Zombie-Prozess, den nicht mal das SIGKILL Signal beenden kann. Zugriffs-Versuche wie z.B. "ls sharename" führen dazu, daß ls ebenfalls ein nicht zu beendender Prozess wird. Im schlimmsten Fall reagiert das ganze Linux System nicht mehr und muß neu gestartet werden. Was man sowieso muß, möchte man den Share wieder aushängen. Die Problematik ist im Internet bekannt und wird in mehreren Foren diskutiert und es wird versucht, Lösungen zu finden. Sämtliche dort aufgeführten Lösungs-Ansätze einen so derart abgestürtzten cifs-Share wieder auszuhängen scheiterten bei mir. Wobei man sich in den Foren einig ist, das Beste ist die Verbindung erst gar nicht einschlafen zu lassen. Der dort vorgestellte Lösungs-Vorschlag einen cronjob einzurichten, der alle 5 Minuten ein touch Signal an den Share sendet, scheint mir nur sinnvoll, wenn man den Share immer verwendet, er also sofort aktiv ist, wenn der Rechner startet und ausgehängt wird, wenn man runterfährt. Möchte man nur hin und wieder mal ein entferntes Windows-Verzeichnis einhängen um mal ein paar Dateien hin und her zu schieben, finde ich die Lösung über einen Clienten der das managed wesentlich effizienter. Genau dafür ist mein Programm cifs-client da.

Damit cifs-client arbeiten kann, braucht es root-Rechte, da der mount-Befehl mit Optionen in einem Standard Linux System nur von root ausgeführt werden kann und das Anlegen eines fehlenden mount-Verzeichnisses unter /mnt diese ebenfalls benötigt. Erreichen kann man das unter Debian bullseye und bookworm mit KDE 5.20 mittels des Befehls

$ pkexec env QTWEBENGINE_DISABLE_SANDBOX=1 DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true cifs-client

Im Programmverzeichnis sollte eine Datei liegen namens "server.conf", welche man selbst mit den Hostnamen oder I.P.-Adressen der Windows-Rechner füllen sollte. Pro Zeile kann ein Rechner per Hostname oder I.P.-Adresse angegeben werden, z.B.

home-PC
laptop
10.0.0.1
		

Die Funktionsweise des Programms ist simpel. Anhand der server.conf wird das Pulldown-Menü für die Server befüllt. Man wählt im Pulldown-Menü einen Server aus, gibt unter Username und Password den Benutzernamen und das Passwort für den Server ein (diese Eingaben werden aus Sicherheitsgründen nicht gespeichert und müssen bei jedem Start des Programms erneut eingegeben werden) und drückt den "Load Shares" Button. Mittels des Befehls "smbclient" wird die Liste der freigegebenen Verzeichnisse des Servers geholt und überprüft, ob die Verzeichnisse bereits eingehängt sind oder nicht. Mittels des mount-Buttons in der ersten Spalte kann man ein Verzeichnis ein oder aushängen. Ob es gemounted ist oder nicht, sagt einem die Status Spalte ganz rechts mittels eines grünen oder roten Buttons. Der Mountpunkt in Spalte 3 wird automatisch generiert anhand des Sharenamens unter dem Verzeichnis /mnt. Drückt man den mount-Button und existiert das mount-Verzeichnis nicht, erfolgt eine Abfrage ob das Verzeichnis angelegt werden soll. Es ist auch möglich mittels des Pull-Down Menüs den Server zu wechseln und gleichzeitig andere Shares von anderen Servern einzuhängen. Hat man beim Beenden des Programms nicht alle Shares wieder ausgehängt, erfolgt eine Sicherheitsabfrage, ob man alle eingehängten Verzeichnisse wieder aushängen und das Programm beenden möchte. Wählt man hier mit Nein, wird das Programm nicht beendet. Dies dient zur Vorbeugung um keine Shares zurück zu lassen, die ohne das touch-Signal des Programms in den nennen wir ihn mal "für immer Schlafmodus" fallen könnten.

Das Programm steht unter der GPL und darf daher von jedem frei verwendet werden. Getestet wurde es unter Debian GNU/Linux, könnte aber auch auf anderen Linux-Distributionen funktionieren. Für auftretende Fehler oder Schäden die das Programm verursacht, übernehme ich keinerlei Haftung, jedoch ist die Wahrscheinlichkeit, daß durch den Gebrauch das System nicht mehr funktioniert sehr gering, da das Programm lediglich die Befehle smbclient, mount, umount und touch ausführt.

Zum Download gibt es zwei komprimierte tar-Archive jeweils für die Debian Distributionen bullseye und bookworm. Sie enthalten ausführbare Binarys und den Quellcode zum selber kompilieren sowie alle erforderlichen sonstigen Dateien wie eine Beispiel-server.conf und die grünen und roten Icons.

Downloads

Debian 11 (bullseye) amd64 Debian 12 (bookworm) amd64
cifs-client1.6-bullseye.tar.gz cifs-client1.6-bookworm.tar.gz

Wer das Programm selbst kompilieren möchte, benötigt die Entwickler-Pakete von Qt5 und build-essential.

# apt-get install qttools5-dev-tools qtpositioning5-dev qt5-qmake qt5-qmake-bin libphonon4qt5-dev build-essential make g++

Nach dem Entpacken des Archivs, wechselt man in das Verzeichnis und gibt folgenden Befehl auf der Konsole ein:

# qmake; make

Das Ergebnis ist eine ausführbare Datei im Verzeichnis mit Namen cifs-client.