DietmarBi
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hallo Spezialisten, gerade versuche ich wieder einmal meine Kenntnisse in Programmieren mit der bash zu erweitern.
Ich habe eine kleine Datei geschrieben die, unter Wine, das Windows-Spiel "Solitär" startet. Natürlich möchte ich auch andere Programme auf diese Weise starten. | #!/bin/bash
# Mai 2017
# Start Win-Solitär mit Hilfe von Wine
wine /media/dietmar/Win_XP/WINDOWS/system32/sol.exe
|
Solitär startet auch, wenn ich vorher im Nautilus Dateimanager die Windows-Festplatte angeklickt hatte. Wenn nicht, tut sich nichts. Ich schließe daraus, dass ich in das Starter-Programm eine Abfrage einfügen muss die prüft ob das Windows-Laufwerk gemountet ist. Falls das nicht der Fall sein sollte müsste wohl ein mount-Befehl durchgeführt werden. Leider habe ich aber noch keine Ahnung wie eine solche Abfrage in der bash auszusehen hat. Weiter interessiert mich, ob Ubuntu nach Beenden von Solitär noch weitere Befehle aus der bash-Datei abarbeitet. Also z.B. das dann nicht mehr benötigte Win-Laufwerk wieder aushängen kann. Es wäre schön wenn mich jemand bei der Lösung meines Problems unterstützen könnte. Vielen Dank schon mal. Dietmar
|
sebix
Ehemalige
Anmeldungsdatum: 14. April 2009
Beiträge: 5582
|
DietmarBi schrieb: Ich schließe daraus, dass ich in das Starter-Programm eine Abfrage einfügen muss die prüft ob das Windows-Laufwerk gemountet ist. Falls das nicht der Fall sein sollte müsste wohl ein mount-Befehl durchgeführt werden. Leider habe ich aber noch keine Ahnung wie eine solche Abfrage in der bash auszusehen hat.
Mounten kannst du mit mount , siehe mount. Die Abfrage kannst du zb mit -f Dateiname durchfuehren, oder die Ausgabe von mount greppen, da gibt es viele Moeglichkeiten. Zu mounten brauchst du allerdings root-Rechte. Du kannst dann aber eine NOPASSWD -Regel in die sudoers einfuegen, siehe sudo Weiter interessiert mich, ob Ubuntu nach Beenden von Solitär noch weitere Befehle aus der bash-Datei abarbeitet. Also z.B. das dann nicht mehr benötigte Win-Laufwerk wieder aushängen kann.
Mit umount kannst du Partitionen wieder aushaengen. Als Parameter entweder das Device oder den Mountpunkt angeben.
|
unbuntuS12
Anmeldungsdatum: 2. Juni 2010
Beiträge: 1816
|
Hehe, mit sowas in der Richtung habe ich auch angefangen. Zu deinen Fragen: DietmarBi schrieb: Ich schließe daraus, dass ich in das Starter-Programm eine Abfrage einfügen muss die prüft ob das Windows-Laufwerk gemountet ist.
Prinzipiell richtig. Du kannst allerdings auch einfach bedingungslos mounten, denn wenn bereits gemountet ist, dann passiert nichts.
Falls das nicht der Fall sein sollte müsste wohl ein mount-Befehl durchgeführt werden.
So ist das. Also wie gesagt, kann das auch bedingungslos erfolgen.
Leider habe ich aber noch keine Ahnung wie eine solche Abfrage in der bash auszusehen hat.
Du kennst man-Pages? Konkret also: man mount Weiter interessiert mich, ob Ubuntu nach Beenden von Solitär noch weitere Befehle aus der bash-Datei abarbeitet. Also z.B. das dann nicht mehr benötigte Win-Laufwerk wieder aushängen kann.
Ja, das ist die Idee. Und zwar exakt so, wie du schreibst: Nach dem Beenden von Wine. Insofern: Probiere mal, dir einen mount-Befehl zusammenzubauen mit Hilfe der Manpage und mithilfe von mount. Wenn das klappt, dann kannst du im Endeffekt deinen Mount in die fstab eintragen.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11261
Wohnort: München
|
Wobei der Dateimanager normalerweise einen Mechanismus über GVFS analog zu gvfs-mount nutzt. mount kann man mit Benutzerrechten nur verwenden, wenn die Partion in der fstab mit der Mount-Option user bzw. users eingetragen ist.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Also, ich würde so ein Laufwerk auch auch eher mit gvfs-mount ein- und aushängen, und nicht "old-school-mäßig" statisch mit mount . Klar funktioniert das auch, aber man braucht dann eben Root-Rechte. (→ man müsste dann wohl was mit sudo visudo einrichten) LG, track
|
unbuntuS12
Anmeldungsdatum: 2. Juni 2010
Beiträge: 1816
|
Gut, bei einer Windows-Partition auf demselben Rechner - womöglich derselben physischen Platte - würde ich durchaus einen Eintrag in die fstab in Erwägung ziehen.
|
DietmarBi
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hallo miteinander, vielen Dank für die Ratschläge. Leider bin ich damit noch nicht weiter gekommen. Wie von ubuntuS12 vorgeschlagen habe ich den mount-Befehl in die Startdatei aufgenommen 1
2
3
4
5
6
7
8
9
10
11
12 | #!/bin/bash
# Mai 2017
# Start Win-Solitär mit Hilfe von Wine
# Partition zu sol.exe einhängen
sudo mount /media/dietmar/Win_XP/
wine /media/dietmar/Win_XP/WINDOWS/system32/sol.exe
# Partition zu sol.exe wieder aushängen
umount /media/dietmar/Win_XP/
|
Ich habe dabei mit und ohne sudo probiert. Leider ohne Erfolg. Das Windows-Programm startet nicht. Wenn ich gvfs-mount in einem Terminal probiere meldet es mir, dass der Befehl nicht gefunden wird. Warum ??? Die man-Seite zu mount habe ich auch studiert. Leider hat auch das nichts genutzt. Ich bin so schlau wie vorher. Kann mir nicht jemand, für Nicht-Fachleute wie mich verständlich, erklären wie der mount-Befehl aussehen muss, damit Wine das Win-Programm starten kann? Prinzipiell könnte ich ja jedes mal im Nautilus auf das Verzeichnis WIN_XP klicken und dann starten. Jetzt hat mich aber die Neugier gepackt und ich möchte wissen wie eine Startdatei auszusehen hat, damit sie funktioniert wie von ihr erwartet. Gruß Dietmar
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
DietmarBi schrieb: Wenn ich gvfs-mount in einem Terminal probiere meldet es mir, dass der Befehl nicht gefunden wird. Warum ???
Zeig bitte | type gvfs-mount
dpkg -l gvfs-bin
echo $PATH
|
|
DietmarBi
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hier ist die gewünschte Ausgabe: | dietmar@dietmar-test2:~$ type gvfs-mount
gvfs-mount ist /usr/bin/gvfs-mount
dietmar@dietmar-test2:~$ dpkg -l gvfs-bin
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name Version Architektur Beschreibung
+++-==============-============-============-=================================
ii gvfs-bin 1.28.2-1ubun i386 userspace virtual filesystem - bi
dietmar@dietmar-test2:~$ echo $PATH
|
Was erwartet ubuntu jetzt von mir?
|
DietmarBi
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hallo,
hier ist noch etwas. Da hat Ubuntu wohl noch ein Return erwartet | dietmar@dietmar-test2:~$ echo $PATH
/home/dietmar/bin:/home/dietmar/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
dietmar@dietmar-test2:~$
|
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
Anhand deiner Ausgabe sollte gvfs-mount funktionieren. Ist das bei dir nicht so, dann solltest du den Befehl samt Fehlermeldung posten, damit man da gezielt nachforschen kann.
|
unbuntuS12
Anmeldungsdatum: 2. Juni 2010
Beiträge: 1816
|
DietmarBi schrieb: Wie von ubuntuS12 vorgeschlagen habe ich den mount-Befehl in die Startdatei aufgenommen
Geh' am besten noch einen Schritt zurück. Du weißt ja genau, wo dein Problem liegt, nämlich beim Mounten. Also sollten wir das Mounten isoliert fehlerfrei hinbekommen und dann in ein Skript einbauen.
| ...
# Partition zu sol.exe einhängen
sudo mount /media/dietmar/Win_XP/
...
|
Das kann so auch nicht funktionieren.
Ich habe dabei mit und ohne sudo probiert.
mount funktioniert erstmal nur mit root-Rechten, sprich, mit sudo.
Leider ohne Erfolg. Das Windows-Programm startet nicht.
Moment: Das Mounten funktioniert nicht, deshalb existiert der Pfad nicht, deshalb startet das Programm nicht. Also: Beim Mouten den Fehler beheben. Vielleicht noch als Info: Ich plane so vorzugehen, dass du dir erstmal einen funktionierenden Mount-Befehl zusammenbaust, dann auf dieser Grundlage einen Eintrag in die fstab hinzufügst und außerdem dort die user-Option setzt, die es gestattet, auch ohne root-Rechte zu mounten. Insofern kümmern wir uns erstmal um den Mount-Befehl. Du hast ja die man-Page studiert. Das mag erstmal unübersichtlich aussehen, aber der Kern steht hier: The standard form of the mount command is:
mount -t type device dir
This tells the kernel to attach the filesystem found on device (which is of type type) at the directory dir. Dazu sei angemerkt, dass der Typ, also das Dateisystem in aller Regel automatisch erkannt wird und die Option daher ausgelassen werden kann. Es bleibt also ein Befehl in der Art mount device dir , wobei das ganze natürlich mit root-Rechten ausgeführt werden muss. Daher fügst du ein sudo an: sudo mount device dir Die zwei Argumenten, die mount also mindestens erwartet sind das Gerät, das du einhängen möchtest und den Ort, an dem du es einhängen möchtest. Vergleichen wir das mit deinem Befehl, dann stellen wir fest: sudo mount /media/dietmar/Win_XP/ Du übergibst mount genau 1 Argument. Du meinst zwar mit diesem Argument den Ort, aber mount wird an dieser Stelle nach einem Gerät suchen, das es einhängen soll und scheitern. Das gesuchte Gerät ist normalerweise die Partition einer Festplatte. Du hast nun mehrere Möglichkeiten, herauszufinden, welche Partition du suchst. Möglichkeit 1: sudo fdisk --list Zeigt dir alle Platten und Partitionen an. Dort kannst du die richtige raussuchen (wir helfen). Oder (hier vermutlich schneller): Du öffnest ein Terminal, gibst mount ohne Parameter und ohne sudo ein. Das zeigt dir alle im Moment eingebundenen Dateisysteme. Danach hängst du dein gewünschtens Dateisytem über nautilus ein. Dann führst du den Befehl mount erneut aus. Achte auf den Unterschied.
|
DietmarBi
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hallo UbuntuS12, erst einmal vielen Dank für Deine sehr ausführlichen Erklärungsversuche. Ich muss zugeben, fast 30 Jahre MS-DOS und Windows haben mich wohl so geprägt, dass ich mit dem Verstehen der Linux-Verzeichnisse Probleme habe. Um aber zu lernen bin ich nach Deinen Vorschlägen vorgegangen.
Ich habe also zuerst 2 mal mount in das Terminal eingegeben. Nachstehend poste ich aber nur den Teil der Ausgaben der nach dem Einhängen der WIN XP-Partition in Nautilus zusätzlich angezeigt wird. | /dev/sda1 on /media/dietmar/Win_XP type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
|
Mit diesen Angaben habe ich einen mount-Befehl im Terminal eingegeben. Das Ergebnis zeige ich einmal hier: dietmar@dietmar-test2:~$ sudo mount /media/dietmar/Win_XP
[sudo] Passwort für dietmar:
mount: can't find /media/dietmar/Win_XP in /etc/fstab Die Fehlermeldung sagt der Ordner wäre in der /etc/ffstab nicht vorhanden. Deshalb kopiere ich den Inhalt dieser Datei mal hier herein. # /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda7 during installation
UUID=cf5154c5-a72c-4548-827b-adc148d89443 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda6 during installation
UUID=0264dca4-4328-4277-bd54-302748eb6442 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 Den Dateiinhalt verstehe ich so: Nur die Ubuntu- und die SWAP-Partition sind eingetragen. Ich frage mich also, woher kennt Nautilus die anderen Partitionen? Ich habe deshalb auch noch wie vorgeschlagen fdisk –list durchgeführt. Das Ergebnis ist hier: dietmar@dietmar-test2:~$ sudo fdisk --list
Medium /dev/sda: 298,1 GiB, 320072933376 Bytes, 625142448 Sektoren
Einheiten: sectors von 1 * 512 = 512 Bytes
Sektorengröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O Größe (minimal/optimal): 512 Bytes / 512 Bytes
Typ der Medienbezeichnung: dos
Medienkennung: 0x10f710f6
Gerät Boot Start Ende Sektoren Größe Id Typ
/dev/sda1 * 63 245762369 245762307 117,2G 7 HPFS/NTFS/exFAT
/dev/sda2 245762431 625139711 379377281 180,9G f W95 Erw. (LBA)
/dev/sda5 245762433 343418682 97656250 46,6G 7 HPFS/NTFS/exFAT
/dev/sda6 616857600 625139711 8282112 4G 82 Linux Swap / Solaris
/dev/sda7 343418880 616847359 273428480 130,4G 83 Linux
Die Einträge der Partitionstabelle stimmen nicht mit der Reihenfolge der Medien überein.
Medium /dev/sdb: 19 GiB, 20411080704 Bytes, 39865392 Sektoren
Einheiten: sectors von 1 * 512 = 512 Bytes
Sektorengröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O Größe (minimal/optimal): 512 Bytes / 512 Bytes
Typ der Medienbezeichnung: dos
Medienkennung: 0x2eb3c770
Gerät Boot Start Ende Sektoren Größe Id Typ
/dev/sdb1 * 63 39862271 39862209 19G 7 HPFS/NTFS/exFAT Ich hoffe, Du kannst aus diesen Angaben erkennen wie ein mount-Befehl aussehen muss, damit wine auf die richtige Partition zugreifen kann. Gruss Dietmar
|
unbuntuS12
Anmeldungsdatum: 2. Juni 2010
Beiträge: 1816
|
Hallo Dietmar, DietmarBi schrieb: Ich habe also zuerst 2 mal mount in das Terminal eingegeben. Nachstehend poste ich aber nur den Teil der Ausgaben der nach dem Einhängen der WIN XP-Partition in Nautilus zusätzlich angezeigt wird. /dev/sda1 on /media/dietmar/Win_XP type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
Genau das wollte ich sehen (aber C-Code ist das nicht) ☺ Nun wissen wir also, dass das Gerät, also die Partition, die du einhängen willst /dev/sda1 ist.
Mit diesen Angaben habe ich einen mount-Befehl im Terminal eingegeben. Das Ergebnis zeige ich einmal hier: dietmar@dietmar-test2:~$ sudo mount /media/dietmar/Win_XP
[sudo] Passwort für dietmar:
mount: can't find /media/dietmar/Win_XP in /etc/fstab
Das ist exakt der Befehl, den du eingangs direkt in dein Skript eingebaut hast. Das kann also weiterhin nicht funktionieren und ich hatte ja auch schon gesagt, wieso:
Du übergibst mount genau 1 Argument. Du meinst zwar mit diesem Argument den Ort, aber mount wird an dieser Stelle nach einem Gerät suchen, das es einhängen soll und scheitern.
Tatsächlich war meine aus der Hüfte geschossene Vermutung, wie mount bei diesem ungültigen Befehl antworten würde falsch. Stattdessen such es in der fstab, der Dateisystemtabelle, ob es die unzureichenden Informationen dort vervollständigen kann. Das wollen wir aber erst in Angriff nehmen, wenn wir es einmal hinbekommen haben. Also, zurück auf Anfang: Du musst mount sagen, was (welche Partition) du wo (Pfad) mounten willst. Du sagst ihm nur, wo du was mouten willst. Aber woher soll mount wissen, dass du nicht gerade die zweite Partition deines USB-Sticks, die 5. Partition deiner internen Platte oder ein Netzlaufwerk meinst, sondern konkret deine Windows-Partition? Du hast schon die Ausgabe von fdisk gepostet. Dort siehst du alle Platten (genauer: alle blockorientierten Geräte) und deren Partitionen. Du weißt auch schon, welche Partition deine Windows-Partition ist. Mit den bisherigen Infos hier solltest du jetzt einen neuen Versuch starten können, einen mount-Befehl zu schreiben, der das tut, was du willst. 😉
|
DietmarBi
(Themenstarter)
Anmeldungsdatum: 31. Dezember 2011
Beiträge: 278
Wohnort: Unterfranken
|
Hallo, jetzt habe ich noch ein paar Varianten des mount-Befehles ausprobiert (entschuldige, wenn ich wieder falsch formatiert habe). Diese Variante führt offenbar zum gewünschten Ergebnis: | dietmar@dietmar-test2:/$ sudo mount /dev/sda1 /media/dietmar/
|
Jedenfalls zeigt Nautilus die Partition Win_XP danach als eingehängt an, wenn auch ohne Inhalt. Jetzt suche ich aber noch nach einer Erklärung für folgende Erscheinung: Wenn ich die Partition Win_XP in Nautilus, durch einen Klick auf Win_XP einhänge lautet die Pfadangabe zu Solitär (Sol.exe): | /media/dietmar/Win_XP/WINDOWS/system32
|
Wenn ich dagegen im Terminal mounte wie oben beschrieben lautet der Pfad | /media/dietmar/WINDOWS/system32
|
Welchen Hintergrund hat denn das?
|