• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Standardbrowser des Benutzers auslesen

Hallo,

ich möchte mit einem Skript den Standardbrowser des Benutzers auslesen. Der Grund ist ein etwas älteres Programm, das den Standardbrowser über die Umgebungsvariable WEBBROWSER bestimmt und, wenn diese nicht gesetzt ist, auf netscape zurückfällt. netscape benutzt kein Mensch mehr und WEBBROWSER ist bei kaum jemandem gesetzt, deswegen muss eine Lösung her.

Ich habe mir das so vorgestellt, dass das Skript

- die Umgebungsvariable WEBBROWSER unangetastet lässt, wenn sie gesetzt ist,
- den KDE-Standardbrowser ausliest, wenn gerade eine KDE-Sitzung läuft,
- den GNOME-Standardbrowser ausliest, wenn gerade eine GNOME-Sitzung läuft,
- den GNOME-Standardbrowser bevorzugt, wenn einer der beiden Auslesvorgänge erfolgreich ist, aber nicht bestimmt werden kann, ob KDE oder GNOME läuft,
- auf mozilla zurückfällt, wenn keiner der Auslesvorgänge erfolgreich ist.

Das Ganze soll nach Möglichkeit distributionsunabhängig sein, also ohne hartkodierte SuSE-spezifische /opt-Pfade auskommen. Folgendes habe ich mir bisher ausgedacht:
Code:
#!/bin/sh

# Hier soll der Benutzer im Notfall den Ausweichbrowser festlegen können

# WEBBROWSER_DEFAULT=netscape
WEBBROWSER_DEFAULT=mozilla
# WEBBROWSER_DEFAULT=firefox

# WEBBROWSER_DEFAULT=galeon
# WEBBROWSER_DEFAULT=epiphany
# WEBBROWSER_DEFAULT=konqueror
# WEBBROWSER_DEFAULT=opera

# WEBBROWSER auf WEBBROWSER_DEFAULT setzen, falls noch nicht gesetzt

if [ $WEBBROWSER ] ; then
   true
else
   WEBBROWSER=$WEBBROWSER_DEFAULT
fi

# Falls möglich, das gerade gesetzte durch etwas besseres überschreiben
# Statt [ $KDE ] muss hier eine Prüfung rein, ob KDE läuft

if [ $KDE ] ; then

   # PROBLEM: Was passiert, wenn das Programm kde-config fehlt?
   # PROBLEM: Was passiert, wenn der Pfad des Benutzers in der Ausgabe von kde-config nicht zuerst kommt?
   # PROBLEM: Was passiert, wenn der Benutzer nie einen Standardbrowser gesetzt hat?
   # PROBLEM: Was passiert, wenn BrowserApplication auch in einer Kommentarzeile vorkommt?

   WEBBROWSER=$(grep BrowserApplication $(kde-config --path config | sed 's|:.*||')/kdeglobals | sed 's|.*=[[:blank:]]*||')

else

   # PROBLEM: Was passiert, wenn das Programm gconftool-2 fehlt?
   # PROBLEM: Was passiert, wenn der Pfad zum Browser Leerzeichen enthält?

   WEBBROWSER=$(gconftool-2 -g /desktop/gnome/url-handlers/http/command | sed 's| .*||')

fi

export WEBBROWSER

exec xnview "$@"
Das Problem ist, dass ich trotz Bemühung nicht so recht weiterkomme und nicht mal weiß, ob es überhaupt ein brauchbarer Ansatz ist. Die problematischen Stellen sind markiert, weiß jemand weiter?
 

TeXpert

Guru
Simplester Ansatz, lass den User entscheiden:

Code:
#!/bin/bash

dialog --clear --title "Browserauswahl" --checklist \
    'Browservariable nichgesetz, wen verwenden' 10 70 4 \
    '1' 'mozilla' off \
    '2' 'konqui' off \
    '3' 'firefox' off \
    '4' 'wat soll der scheiß?' on 2> /tmp/tmp.$$

options=$(cat /tmp/tmp.$$)
rm /tmp/tmp.$$

for i in $options; do
   case "$i" in
      "1" ) browser="mozi";;
      "2" ) browser="konqui";;
      "3" ) browser="fire";;
      "4" ) exit 1;;
   esac
done

echo $browser

ansonsten ein paar Ideen zu KDE, gnome sollte analog sein
traffic schrieb:
# Statt [ $KDE ] muss hier eine Prüfung rein, ob KDE läuft
test auf evn -> KDE_FULL_SESSION=true
# PROBLEM: Was passiert, wenn das Programm kde-config fehlt?
# PROBLEM: Was passiert, wenn der Pfad des Benutzers in der Ausgabe von kde-config nicht zuerst kommt?
# PROBLEM: Was passiert, wenn der Benutzer nie einen Standardbrowser gesetzt hat?
# PROBLEM: Was passiert, wenn BrowserApplication auch in einer Kommentarzeile vorkommt?

1. dürfe eigendlich nicht fehlen, da es zu den base-libs gehört

2. Du musst sowieso beide checken, evtl. hat der Sysadmin einen festgelegt. Wenn Du nur das persönliche haben willst sollte ein
Code:
$perl -we ' my @configs = split /:/, `kde-config --path config`; chomp(my $user = `id -nu`); foreach (@configs) { print $_."\n" if (/$user/);};'
helfen (analog kannst Du ja auch das System nutzen

3. nutze den System-Default, wenn auch nicht gesetzt Konqui (der ist dann ja zumindest da)

4. wie sind die kommentiert? entsprechende Regex bauen.

[/quote]
 
Oben