QPixmap & kbuildsycoca

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
theomega
Beiträge: 26
Registriert: 02.05.2005 17:56:57

QPixmap & kbuildsycoca

Beitrag von theomega » 17.10.2005 21:41:55

Hy,
ich habe mir mit kdialog versucht ein einfaches script zu schreiben, das mir hilft einen Samba-Share zu mounten.

Code: Alles auswählen

#!/bin/bash

user=$1
share=$2
mpoint=$3

export DISPLAY=:0

if [ -z $mpoint ]; then
    kdialog --error "Parameter: [Benutzername] [Freigabe] [Mountpoint]"
else
    pass=`kdialog --title SMB-Share mounten --password "Passwort für $user@$share:"`
    if [ $? = 0 ]; then
        echo Mounting ....
        result=`mount -t smbfs -o username=$user,password=$pass $share $mpoint`
        if [ $? != 0 ]; then
            kdialog --error "$result"
        fi
        echo finished
    fi
fi
Problem, wenn ich das Script aufrufe, das Passwort eingebe und dann auf ok klicke, bekomme ich meinstens diesen fehler:

Code: Alles auswählen

sh /root/mountmp3s.sh external //theather/mp3s /mnt
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
QPixmap: Cannot create a QPixmap when no GUI is being used
kbuildsycoca running...
Mutex destroy failure: Das Gerät oder die Ressource ist belegt
ICE default IO error handler doing an exit(), pid = 6409, errno = 0
Mounting ....
Was hat es mit den beiden Fehler (QPixMap und kbuildsyoca) auf sich?

Danke
TO

matzi
Beiträge: 8
Registriert: 16.10.2005 22:50:01
Wohnort: Weinheim
Kontaktdaten:

Beitrag von matzi » 18.10.2005 00:01:57

Moin theomega,

ich vermute du musst das script als root starten (weil du die Variable DISPLAY auf :0 setzt). In diesem Fall wird dir aber der Zugriff auf den X-Server verwehrt.

kdesu sollte das Problem lösen, also versuch's doch mal so:

Code: Alles auswählen

#!/bin/bash

if [ `id -u` -ne 0 ]; then
    exec kdesu -d -- "$0" "$@"
fi

user=$1
share=$2
mpoint=$3

if [ -z "$mpoint" ]; then
    kdialog --error "Parameter: [Benutzername] [Freigabe] [Mountpoint]"
    exit 1
fi
pass=`kdialog --title SMB-Share mounten --password "Passwort für $user@$share:"`
if [ $? = 0 ]; then
    echo Mounting ....
    result=`mount -t smbfs -o "username=$user,password=$pass" "$share" "$mpoint"`
    if [ $? != 0 ]; then
        kdialog --error "$result"
    fi
    echo finished
fi
Gruß
matzi

theomega
Beiträge: 26
Registriert: 02.05.2005 17:56:57

Beitrag von theomega » 18.10.2005 21:32:11

Hey,
danke für die schnelle Hilfe, ich habe deinen Code (leicht verändert) übernommen:

Code: Alles auswählen

#!/bin/bash

echo Stage1
if [ `id -u` -ne 0 ]; then
    exec kdesu -d -- $0 $@
else
    user=$1
    share=$2
    mpoint=$3

    export DISPLAY=:0

    if [ -z $mpoint ]; then
        kdialog --error "Parameter: [Benutzername] [Freigabe] [Mountpoint]"
    else
        #prüfen ob mountverzeichniss existiert
        if [ -d $mpoint ]; then
            #Prüfen ob schon gemounted
            check1=`mount | grep "on $mpoint"`
            if [ $? != 1 ]; then
                kdialog --error "Im Mountpoint ist bereits ein Gerät eingehängt"
            else
                mount | grep $share
                if [ $? != 1 ]; then
                    kdialog --error "Der Share ist bereits gemounted"
                else
                    pass=`kdialog --title SMB-Share mounten --password "Passwort für $user@$share:"`
                    if [ $? = 0 ]; then
                        result = `mount -t smbfs -o username=$user,password=$pass $share $mpoint`
                        if [ $? != 0 ]; then
                            kdialog --error "$result \n code $?"
                        fi
                        kdialog --msgbox "Fertig"
                    fi
                fi
            fi
        else
                kdialog --error "Das Verzeichniss $mpoint existiert nicht"
        fi
    fi
fi
Das ganze funktioniert perfekt, mit ausname von einem Problem: Als root ausgeführt funktioniert es (außer einem Haufen Fehlermeldungen auf der Konsole) problemlos.
Als Benutzer jedoch hat das ganze ein großes Problem: Die Abfrage nach dem Passwort (pass=` ...) braucht extrem lange, ca. 20 Sekunden. Ich habe durch debugen festgestellt, das es wirklich diese Abfrage ist und kein anderer Befehl (ich dachte etwa an das mounten, ist es aber definitiv nicht).

Wer hat mir einen Rat? Wiso dauert genau dieser Befehl so lange?

Danke
TO

matzi
Beiträge: 8
Registriert: 16.10.2005 22:50:01
Wohnort: Weinheim
Kontaktdaten:

Beitrag von matzi » 19.10.2005 17:13:36

Als Benutzer jedoch hat das ganze ein großes Problem: Die Abfrage nach dem Passwort (pass=` ...) braucht extrem lange, ca. 20 Sekunden. Ich habe durch debugen festgestellt, das es wirklich diese Abfrage ist und kein anderer Befehl (ich dachte etwa an das mounten, ist es aber definitiv nicht).

Wer hat mir einen Rat? Wiso dauert genau dieser Befehl so lange?
Hallo theomega,

bei mir is es genau so langsam. Wenn's schneller gehen soll kannst du zenity statt kdialog verwenden.

Gruß
matzi

Antworten