ubuntuusers.de

Programme als "root" starten mit Grafikfehler

Status: Ungelöst | Ubuntu-Version: Kubuntu 12.04 (Precise Pangolin)
Antworten |

spuuk

Anmeldungsdatum:
10. Dezember 2007

Beiträge: 545

Wohnort: Graz

Folgendes Problem tritt immer wieder auf :

Wenn ich versuche irgendein KDE Programm als root zu starten (kdesudo) , erhalte ich nur den Fensterrahmen des Programmes, und in der Konsole stehen eine menge Fehlermeldungen aus denen ich nicht schlau werde .

Am Beispiel Dolphin :

X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    129 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x6600012
X Error: BadShmSeg (invalid shared segment parameter) 128
  Extension:    129 (MIT-SHM)
  Minor opcode: 5 (X_ShmCreatePixmap)
  Resource id:  0x6600061
QPixmap::scaled: Pixmap is a null pixmap
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)
  Resource id:  0x6600062

Siehe Anhang "Snapshot1".

Wie im Bildschirmfoto zu sehen ist, funktionieren nicht ROOT kde anwendungen korrekt.

Komischerweise gilt das auch für als root gestartete GTK2 Programme, nur eben QT/KDE Programme wollen nicht als root starten.

Leider konnte ich auch mittels google nichts brauchbares finden, und die Fehlermeldung sagt mir gar nichts.

Nur eben was von einen das der Versuch auf eine Private Resource zuzugreifen abgelehnt wurde , macht mich aber auch nicht schlauer.

Zur Info :

KDE System ist KDE 4.10, Der Rechner verfügt über 8 GB Ram, Kernel ist 32 bit :

3.2.0-38-generic-pae

Nachtrag : Es funktionierte auch mit mit KDe 4.8 nicht welches bei 12.04 dabei ist, das System ist komplett neu aufgesetzt, und alle Aktualisierungen sind bis heute eingespielt. (12.04.02 )

Anhang

mgraesslin Team-Icon

Avatar von mgraesslin

Anmeldungsdatum:
8. November 2006

Beiträge: 9183

normalerweise würde ich antworten: starte die Anwendung nicht als root, das macht man nicht. Aber das finde ich jetzt interessant ☺

Von allem was ich sehen kann, scheint es Probleme mit der SHM (shared memory extension von X11) zu geben. Mir war bisher nicht bewusst, dass Qt 4.8 SHM verwendet (man lernt neues jeden Tag), dass das nicht funktioniert über sudo ist irgendwie ja zu erwarten.

Ich hab verschiedene Ideen wie man das Problem beheben könnte:

  1. die Qt Anwendungungen explizit mit graphicssystem native starten (siehe --help-qt)

  2. kdesu (/usr/lib/kde4/libexec/kdesu) anstatt kdesudo verwenden

  3. ssh -X root@localhost

HmpfCBR Team-Icon

Avatar von HmpfCBR

Anmeldungsdatum:
22. Mai 2007

Beiträge: 4597

Wohnort: Kiel

mgraesslin schrieb:

  1. [...]

  2. kdesu (/usr/lib/kde4/libexec/kdesu) anstatt kdesudo verwenden

Das ist zumindest unter Kubuntu nur ein symbolischer Link auf kdesudo.

:~$ ls -l /usr/lib/kde4/libexec/kdesu
lrwxrwxrwx 1 root root 23 Mär  3  2012 /usr/lib/kde4/libexec/kdesu -> /etc/alternatives/kdesu*
:~$ ls -l /etc/alternatives/kdesu 
lrwxrwxrwx 1 root root 16 Mär  3  2012 /etc/alternatives/kdesu -> /usr/bin/kdesudo*

Allerdings gibt es ein /usr/lib/kde4/libexec/kdesu-distrib/kdesu , siehe auch sudo.

spuuk

(Themenstarter)

Anmeldungsdatum:
10. Dezember 2007

Beiträge: 545

Wohnort: Graz

mgraesslin schrieb:

normalerweise würde ich antworten: starte die Anwendung nicht als root, das macht man nicht. Aber das finde ich jetzt interessant ☺

Von allem was ich sehen kann, scheint es Probleme mit der SHM (shared memory extension von X11) zu geben. Mir war bisher nicht bewusst, dass Qt 4.8 SHM verwendet (man lernt neues jeden Tag), dass das nicht funktioniert über sudo ist irgendwie ja zu erwarten.

Ich hab verschiedene Ideen wie man das Problem beheben könnte:

  1. die Qt Anwendungungen explizit mit graphicssystem native starten (siehe --help-qt)

  2. kdesu (/usr/lib/kde4/libexec/kdesu) anstatt kdesudo verwenden

  3. ssh -X root@localhost

Danke, also ich habe deine 3 Ideen durchprobiert.

  1. Funktioniert : sudo -s für root , dann z.b. dolphin -graphicssystem native

  2. Funktioniert nicht.

  3. Funktioniert.

Kann ich das "-graphicssystem native" irgendwo fix eintragen das man es nicht immer mitangeben muss ?

Bzgl. Root und nicht starten .. Einige Anwendungen müssen zwangsläufig mit root gestartet werden z.b. Partitionmanager.

Okay, könnte auch GTK2 Programme dafür verwenden, aber das ist ein anderes Thema.

HmpfCBR Team-Icon

Avatar von HmpfCBR

Anmeldungsdatum:
22. Mai 2007

Beiträge: 4597

Wohnort: Kiel

spuuk schrieb:

1. Funktioniert : sudo -s für root , dann z.b. dolphin -graphicssystem native

Diese Links könntest du schon bald brauchen Homeverzeichnis (Abschnitt „Rechte“), sudo (Abschnitt „root-bei-grafischen-Programmen“). ☺ Bei sudo -s machst du eine root-shell auf. Die $HOME-Variable in dieser ist aber auf deinen vorherigen Nutzer gesetzt, wodurch dort die Rechte durcheinander kommen können. Typischer Fall wäre die ~/.Xauthority.

Bzgl. Root und nicht starten .. Einige Anwendungen müssen zwangsläufig mit root gestartet werden z.b. Partitionmanager.

Jein. Eigentlich sollten graphische Programme, die für bestimmte Aufgaben bestimmte Rechte brauchen, sich diese für die jeweilige Aufgabe über PolicyKit holen. Aber für dein Beispiel hast du glaube ich recht, der Partitionsmanager holt sich die Rechte schon beim Start. In der Desktopdatei /usr/share/applications/kde4/partitionmanager.desktop steht in den letzten Zeilen

X-KDE-SubstituteUID=true

Nach meinem Verständnis sorgt dies dafür, dass das Programm nach Root Rechten fragt und dann auch damit startet, den genauen Mechanismus dazu kenne ich allerdings nicht und würde daher auch nicht dazu raten einfach eine dolphin-root.desktop Datei anzulegen, die ebenfalls diese Zeile enthält (wobei wenn man ein gutes Backup hat und gerade experimentierfreudig ist 😉).

spuuk

(Themenstarter)

Anmeldungsdatum:
10. Dezember 2007

Beiträge: 545

Wohnort: Graz

HmpfCBR schrieb:

spuuk schrieb:

1. Funktioniert : sudo -s für root , dann z.b. dolphin -graphicssystem native

Diese Links könntest du schon bald brauchen Homeverzeichnis (Abschnitt „Rechte“), sudo (Abschnitt „root-bei-grafischen-Programmen“). ☺ Bei sudo -s machst du eine root-shell auf. Die $HOME-Variable in dieser ist aber auf deinen vorherigen Nutzer gesetzt, wodurch dort die Rechte durcheinander kommen können. Typischer Fall wäre die ~/.Xauthority.

Ja in der Tat das weiß ich , aber in der Not (bevor ich gar keine Programme mit Root starten kann) akzeptiere ich dieses Problem eben, und irgendwelche Nachteile/Probleme sind mir noch nicht aufgefallen.

Bzgl. Root und nicht starten .. Einige Anwendungen müssen zwangsläufig mit root gestartet werden z.b. Partitionmanager.

Jein. Eigentlich sollten graphische Programme, die für bestimmte Aufgaben bestimmte Rechte brauchen, sich diese für die jeweilige Aufgabe über PolicyKit holen. Aber für dein Beispiel hast du glaube ich recht, der Partitionsmanager holt sich die Rechte schon beim Start. In der Desktopdatei /usr/share/applications/kde4/partitionmanager.desktop steht in den letzten Zeilen

X-KDE-SubstituteUID=true

Nach meinem Verständnis sorgt dies dafür, dass das Programm nach Root Rechten fragt und dann auch damit startet, den genauen Mechanismus dazu kenne ich allerdings nicht und würde daher auch nicht dazu raten einfach eine dolphin-root.desktop Datei anzulegen, die ebenfalls diese Zeile enthält (wobei wenn man ein gutes Backup hat und gerade experimentierfreudig ist 😉).

Tja und damit fängt mein Problem ja an, alle KDE/QT Programme welche "root" Rechte brauchen - egal ob jetzt als normaler user oder als root user gestartet - funktionieren eben nicht wegen dieses x11 shared zeugs.

Weiß der Geier wieso das auf einmal auftritt.

Z.b.

:~$ partitionmanager -graphicssystem native

Abfrage des Passworts

partitionmanager(18105)/kdeui (kdelibs): Attempt to use QAction "toggleDockDevices" with KXMLGUIFactory! 
partitionmanager(18105)/kdeui (kdelibs): Attempt to use QAction "toggleDockOperations" with KXMLGUIFactory! 
partitionmanager(18105)/kdeui (kdelibs): Attempt to use QAction "toggleDockInformation" with KXMLGUIFactory! 
partitionmanager(18105)/kdeui (kdelibs): Attempt to use QAction "toggleDockLog" with KXMLGUIFactory! 
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: No such file or directory
QFileSystemWatcher: failed to add paths: /root/.config/ibus/bus
X Error: BadAccess (attempt to access private resource denied) 10
  Extension:    129 (MIT-SHM)
  Minor opcode: 1 (X_ShmAttach)
  Resource id:  0x320000f
X Error: BadShmSeg (invalid shared segment parameter) 128
  Extension:    129 (MIT-SHM)
  Minor opcode: 5 (X_ShmCreatePixmap)
  Resource id:  0x32000c5
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Major opcode: 62 (X_CopyArea)

Der Parameter "-graphicssystem native" scheint also nicht durch ein KDESUDO an das aufzurufende Programm weitergegeben zu werden.

Hingegen starte ich es als "root" also ein "sudo -s" und dann : partitionmanager -graphicssystem native

funktioniert es, da nehme ich es in kauf das er das falsche (user) home nimmt, hauptsache es funktioniert.

Außer die Ursache für dieses Problem wird gefunden.

Selbiges gilt auch für alle "PolicyKit" Sachen also den Paketmanger Moun und so.

Antworten |