18.12.2018, 14:56 UTC+1

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Beiträge: 711

Geschlecht: Männlich

1

14.07.2009, 01:12

so geht's: Desktop-Verknüpfung zu einem Bash-Kommando erstellen

Wer von Windows kommt, ist es gewohnt, für alles Mögliche Desktop-Verknüpfungen zu haben. Unter Linux geht das auch.
Wir brauchen dazu ein Logo, eine *.desktop Textdatei, die wir auf den Desktop einfügen und (in unserem Fall) eine Bash-Datei.

Das Logo erstellen wir vom Typ png in der Größe von 64x64 Bildpunkten. Dieses hinterlegen wir unter /usr/share/%name%. In denselben Ordner legen wir auch unsere Bash-Datei.
Die *.desktop Datei beginnt und endet mit einer Leerzeile! Diese lassen sich hier nicht darstellen, sollten aber eingefügt werden.
Hier ein Beispiel, in dem bei mir %PC% und %name% durch die richtigen Werte direkt zu ersetzen sind:

Quellcode

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Name=mount %PC%
Comment=mount to the remote pc: %PC%
Exec=bash /usr/share/%name%/mount_%PC%
Icon=/usr/share/%name%/mount_64.png
StartupNotify=true
Terminal=false
Type=Application
Categories=Network;


Den Inhalt habe ich aus einer *.desktop Datei, die mit dem gtkvncviewer kam. Darin habe ich nur die Zeilen Name=, Comment=, Exec= und Icon= angepasst.
Wer sich besser mit Linux auskennt als ich, sollte sich für weitergehende Erkenntnisse den Viewer installieren und damit die Desktop-Verknüpfung erstellen. Da geht einiges mehr, als ich hier brauchte bzw. umsetzen konnte. Incl. Bildschirm-Abfragen und deren Speicherung. Einfach mal nach der Installation in das Verzeichnis /usr/share/gtkvncviewer schauen.


Ich habe das benötigt, um für Datenaustausch ein freigegebenes Laufwerk zu mounten. Das funzt prima. Ich habe erst gedacht, ich müsste auch ein Passwort in der Datei speichern. Weil ich mich ja mit einem Passwort anmelden muss. Das ist aber ein Trugschluss gewesen. Und das wäre ja auch sicherheitstechnischer Wahnsinn gewesen.

Ich habe auf dem PC einen eingeschränkten Benutzer, der keinen Zugriff zu irgendwelchen Daten und keine Schreibrechte auf C: hat. Dieser Benutzer ist ohne Passwort eingerichtet. Er kann aber - wie jeder Benutzer bei XP Home - auf freigegebene Laufwerke zugreifen. Und damit geht es ohne Risiko. Hier so eine Bash-Datei:

Quellcode

1
2
3
4
#!/usr/bin/bash

sudo mkdir /media/Datenaustausch
sudo mount //192.168.xxx.xxx/Datenaustausch /media/Datenaustausch -o username=%user%,workgroup=Msheimnetz,uid=knoppix
MfG. Cottonwood.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Cottonwood« (14.07.2009, 18:09)


RalfonLinux

Erleuchteter

Beiträge: 2 936

Geschlecht: Männlich

2

14.07.2009, 13:18

Zitat

Quellcode

1
sudo mount //192.168.xxx.xxx/Datenaustausch /media/Datenaustausch -o username=%user%,workgroup=Msheimnetz,uid=knoppix

Sollte das nicht $USER statt %user% heißen ?
Weiterhin solltest du auch die Workgroupbezeichnung weiter oben als Variable definieren, und im Befehl die Variable eintragen.

jm2c
Ralf
Auf Wunsch gibt es nur noch Text und keine Bilder mehr in der Signatur.
Keine ? ....... :evil:

Quellcode

1
2
3
4
5
6
7
8
.
    ~
   - -          M
   /V\         - *
  // \\        /V\
 /( _ )\      // \\
  ^~ ~^      /( _ )\
              ^~ ~^

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »RalfonLinux« (14.07.2009, 13:53)


Beiträge: 711

Geschlecht: Männlich

3

14.07.2009, 18:06

RE: so geht's: Desktop-Verknüpfung zu einem Bash-Kommando erstellen

Hier ein Beispiel, in dem bei mir %PC% und %name% durch die richtigen Werte direkt zu ersetzen sind


Hier findet keine Ersetzung statt. Dazu habe ich auch bisher keine Möglichkeit gefunden. Ich selber brauchte das aber auch nicht.

Jemand mit weitergehenden Linux-Kenntnissen mag gerne das Beispiel vom gtkvncviewer erläutern. Ich kann das bisher noch nicht.
Dort findet jedenfalls eine Ersetzung statt. Über eine Bildschirmmaske. Wie auch immer.
MfG. Cottonwood.

RalfonLinux

Erleuchteter

Beiträge: 2 936

Geschlecht: Männlich

4

14.07.2009, 19:25

Deinen Desktop-Eintrag bekommst du hier erklärt.
Ich weiß zwar nicht wie aktuell die Info ist, aber für die Grundlagen sollte es reichen.

Dein Shell-Script, welches ausgeführt wird, wird die Variable %user% nicht auflösen, da unter Linux die Variablen mit $... adressiert werden.
Wenn du also statt %user% den $USER einträgst, sollte dein Script automatisch den angemeldeten User benutzen.
In diesem Falle also knoppix
Somit wäre ein

Quellcode

1
2
3
4
5
6
7
8
read -p "Userkennung ?" WINUSER
read -p "Arbeitsgruppe/Domäne ?" WORKGROUP
stty -echo
read -p "Domain-Password ?" PASSWORD
stty echo
echo
mkdir /home/$USER/Datenaustausch
sudo mount //192.168.xxx.xxx/Datenaustausch /home/$USER/Datenaustausch -o username=$WINUSER%$PASSWORD,workgroup=$WORKGROUP,uid=$USER
möglich.

Es fragt nach dem Windows-User, dessen Password und der Arbeitsgruppe.
Diese Informationen werden dann benutzt, um die Verbindung aufzubauen.

jm2c
Ralf
Auf Wunsch gibt es nur noch Text und keine Bilder mehr in der Signatur.
Keine ? ....... :evil:

Quellcode

1
2
3
4
5
6
7
8
.
    ~
   - -          M
   /V\         - *
  // \\        /V\
 /( _ )\      // \\
  ^~ ~^      /( _ )\
              ^~ ~^

Beiträge: 711

Geschlecht: Männlich

5

14.07.2009, 21:42

So geht es nicht. Ich habe ja keine Verbindung zur Shell. Ich habe zur Demo mal folgendes gemacht:

Quellcode

1
2
3
4
5
6
7
8
9
10
read -p "Userkennung ?" WINUSER
read -p "Arbeitsgruppe/Domäne ?" WORKGROUP
stty -echo
read -p "Domain-Password ?" PASSWORD
stty echo
echo
mkdir /home/$USER/Datenaustausch
echo sudo mount //192.168.xxx.xxx/Datenaustausch /home/$USER/Datenaustausch \
-o username=$WINUSER%$PASSWORD,workgroup=$WORKGROUP,uid=$USER \
>/home/knoppix/Desktop/nr.txt 2>/home/knoppix/Desktop/nr.txt


Das Ergebnis war eine Datei auf dem Desktop. Damit war bewiesen, dass die Prozedur abgelaufen war. Hier der Inhalt:

Quellcode

1
sudo mount //192.168.xxx.xxx/Datenaustausch /home/knoppix/Datenaustausch -o username=%,workgroup=,uid=knoppix
MfG. Cottonwood.

klaus2008

Meister

Beiträge: 2 700

Geschlecht: Männlich

6

14.07.2009, 22:16

Hast Du mal ausprobiert, was geschieht, wenn in der Desktop-Datei Terminal=true steht?

Gruss Klaus

Beiträge: 711

Geschlecht: Männlich

7

14.07.2009, 22:28

Nichts leichter als das. Aber das Ergebnis ist genau dasselbe. Hat sich nichts geändert.

Ich glaube auch, dass die gestartete Anwendung selber die Parameter der *.desktop Datei auswerten muss.
MfG. Cottonwood.

klaus2008

Meister

Beiträge: 2 700

Geschlecht: Männlich

8

14.07.2009, 22:40

Du könntest (als letzten Versuch :rolleyes: ) folgende geänderte Desktop-Datei ausprobieren

Quellcode

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Name=mount %PC%
Comment=mount to the remote pc: %PC%
Exec=xterm -e /usr/share/%name%/mount_%PC%
Icon=/usr/share/%name%/mount_64.png
StartupNotify=true
Terminal=true
Type=Application
Categories=Network;

Die Änderungen sind in den Zeilen 4 und 7.

Gruss Klaus

Edit: Das Shell-Skript muss natürlich ausführbar sein.

Beiträge: 711

Geschlecht: Männlich

9

14.07.2009, 22:50

Hat leider kein Ergebnis gebracht. Nichts als Abfrage und nichts auf dem Desktop.

Hier die Prozedur:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
echo hello world >/home/knoppix/Desktop/nr.txt 2>/home/knoppix/Desktop/nr.txt

read -p "Userkennung ?" WINUSER
read -p "Arbeitsgruppe/Domäne ?" WORKGROUP
stty -echo
read -p "Domain-Password ?" PASSWORD
stty echo
echo
mkdir /home/$USER/Datenaustausch
echo sudo mount //192.168.xxx.xxx/Datenaustausch /home/$USER/Datenaustausch \
-o username=$WINUSER%$PASSWORD,workgroup=$WORKGROUP,uid=$USER \
>>/home/knoppix/Desktop/nr.txt 2>>/home/knoppix/Desktop/nr.txt
MfG. Cottonwood.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Cottonwood« (14.07.2009, 23:31)


klaus2008

Meister

Beiträge: 2 700

Geschlecht: Männlich

10

14.07.2009, 23:05

Eigentlich meinte ich, dass man die aktuelle Desktop-Datei, die ja schon den Pfad zum Symbol enthält, so ändern sollte, dass ein xterm anstatt der bash gestartet wird. In diesem xterm wird dann mittels der Option -e das Shell-Skript ausgeführt. Von der Zeile Terminal=true nahm ich an, dass sie richtig sein müsste. Die Platzhalter hattest Du im ersten Beitrag verwendet, wie ich vermute, um die Sache zu verallgemeinern. Du solltest also eigentlich konkrete Angaben in deiner Version haben.

Gruss Klaus

Beiträge: 711

Geschlecht: Männlich

11

14.07.2009, 23:55

Wenn ich xterm in einer Bash eingebe, dann geht ein Fenster auf.

Gebe ich aber xterm -e /usr/share/mount/mount_Eee-Box in einer Bash ein, dann passiert überhaupt nichts.
MfG. Cottonwood.

klaus2008

Meister

Beiträge: 2 700

Geschlecht: Männlich

12

15.07.2009, 00:06

Hattest Du das Shell-Skript ausführbar gemacht?

Quellcode

1
chmod a+x /usr/share/mount/mount_Eee-Box
Das muss der Eigentümer der Datei oder root ausführen.

Gruss Klaus

Beiträge: 711

Geschlecht: Männlich

13

15.07.2009, 00:31

Ja. Es lief ja auch vorher. Aber hier der aktuelle Stand:

Quellcode

1
2
3
4
5
6
7
8
9
10
knoppix@Microknoppix:~$ su
root@Microknoppix:/home/knoppix# cd /usr/share/mount
root@Microknoppix:/usr/share/mount# ls -la
insgesamt 10
drwxrwxrwx   2 root root 2048 14. Jul 00:26 .
drwxr-xr-x 204 root root   60 14. Jul 01:40 ..
-rwxrwxrwx   1 root root 3048 13. Jul 22:02 mount_64.png
-rwxrwxrwx   1 root root  455 15. Jul 00:29 mount_Eee-Box
-rwxrwxrwx   1 root root  300 14. Jul 00:32 mount_Grandcanyon
root@Microknoppix:/usr/share/mount# 
MfG. Cottonwood.

klaus2008

Meister

Beiträge: 2 700

Geschlecht: Männlich

14

15.07.2009, 14:27

Lautet die erste Zeile in der Datei /usr/share/mount/mount_Eee-Box

Quellcode

1
#! /usr/bin/bash


Gruss Klaus

Beiträge: 711

Geschlecht: Männlich

15

15.07.2009, 17:09

Jetzt ja. Hat aber auch nichts geändert.

Quellcode

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Name=mount Eee-Box
Comment=mount to the remote pc: Eee-Box
Exec=xterm -e /usr/share/mount/mount_Eee-Box
Icon=/usr/share/mount/mount_64.png
StartupNotify=true
Terminal=true
Type=Application
Categories=Network;


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#! /usr/bin/bash
echo hello world >/home/knoppix/Desktop/nr.txt 2>/home/knoppix/Desktop/nr.txt

read -p "Userkennung ?" WINUSER
read -p "Arbeitsgruppe/Domäne ?" WORKGROUP
stty -echo
read -p "Domain-Password ?" PASSWORD
stty echo
echo
mkdir /home/$USER/Datenaustausch
echo sudo mount //192.168.xxx.xxx/Datenaustausch /home/$USER/Datenaustausch \
-o username=$WINUSER%$PASSWORD,workgroup=$WORKGROUP,uid=$USER \
>>/home/knoppix/Desktop/nr.txt 2>>/home/knoppix/Desktop/nr.txt
MfG. Cottonwood.

Beiträge: 1 150

Geschlecht: Männlich

16

15.07.2009, 23:40

Versuche mal:

Quellcode

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Name=mount Eee-Box
Comment=mount to the remote pc: Eee-Box
Exec=xterm -e bash /usr/share/mount/mount_Eee-Box
Icon=/usr/share/mount/mount_64.png
StartupNotify=true
Terminal=true
Type=Application
Categories=Network;

So müsste es klappen.

//Edit:
Um es noch ein bissel aufzupimpen kann man auch Xdialog verwenden...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »maxi_king_333« (15.07.2009, 23:54)


Beiträge: 711

Geschlecht: Männlich

17

16.07.2009, 00:27

Perfekt. Glückwunsch. :)

Quellcode

1
2
hello world
sudo mount //192.168.xxx.xxx/Datenaustausch /home/root/Datenaustausch -o username=Benutzer%PasswordPPPP,workgroup=Domain,uid=root


Das sind genau meine Eingaben gewesen. 8)
MfG. Cottonwood.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Cottonwood« (16.07.2009, 00:53)


Linux HardwareLinux Computer & PCs | Linux Notebooks & Laptops | Geek Shirts | Geek und Nerd Shirt Shop