auf gconf & KDE zugreifen

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

auf gconf & KDE zugreifen

Beitrag von wolfdec »

hallo,
ich möchte ein paar kleinere Dinge abhängig von der Umgebung ausführen.
Einfachstes Beispiel, ermitteln und starten des Standardbrowsers.

Unter Windows nimmt man die logischerweise die Registry.

Unter Linux steigt der Aufwand aber etwas, so bringen KDE und Gnome ihre eigenen Entsprechungen mit.

Also meine Frage,
1. Wie kann ich feststellen, ob meine Anwenung gerade unter KDE oder Gnome läuft.

2. Wie kann ich dann auf die jeweiligen Systemkonfigurationen zugreifen zum Auslesen von Informationen.
Eventuell auch zum Speichern eigener Daten bzw. manipulieren bestehender.

3. Für nicht KDE/Gnome - Desktops würde ich zusetzlich den User es selbst konfigurieren lassen.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: auf gconf & KDE zugreifen

Beitrag von monta »

Herzlich Willkommen im Forum.

Wenn es nur um den Browser und so geht, schau dir mal die Utils.pas an:
http://www.lazarusforum.de/viewtopic.php?f=29&t=262" onclick="window.open(this.href);return false;

Da ist ne Plattformübergreifende Browserfunktion drin, die in den meisten Fällen arbeiten sollte.
Ob da auch was zur Desktopumgebung selbst drin ist, weiß ich gerade nicht.
Ansonsten musst du viel manuell mchen bzw. externe Programme über TProcess starten und die Ausgabe auswerten.

Siehe auch:
http://www.lazarusforum.de/viewtopic.php?f=16&t=1351" onclick="window.open(this.href);return false;
Johannes

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: auf gconf & KDE zugreifen

Beitrag von wolfdec »

Das Aufrufen des Browsers ist nur ein kleiner Teil, eines Hilfesystem, was ich mir erdacht habe.

Die utils ist sehr interessant. Muss ich mir mal genauer anschauen.
->OpenBrowser()
wie ich mir die anschaue, macht die fast das, was ich will.
statt eine API ruft diese die entsprechenden Programme auf der Konsole auf.

zur Not hätte ich noch den Umweg über Python.

Eleganter wäre natürlich eine Unit für gconf (gleiches für KDE), welche die entsprechenden C-Header nach Pascal holt.
Nehme nur an, da ist noch nichts fertiges da.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: auf gconf & KDE zugreifen

Beitrag von monta »

Mir ist zumindest nichts dergleichen was als Pascalunit vorliegt bekannt.

Das ganze wird ja auch noch umfrangreicher, KDE4 und KDE3 ist ja ein gewaltiger Unterschied. Und wenn ich mal ketzerisch fragen darf (weiß ja nicht, was du genau machen willst), was ist mit anderen Umgebungen, die nicht Gnome oder KDE heißen? :wink:

Ich fürchte fast, das beste ist das Aufrufen über die Konsole (bspw. gconftool für alles mit gconf) und parsen des Outputs, damit kommst du wahrscheinlich am besten an deine benötigten Angaben, bzw. kannst auch einfach Werte setzen. Der Aufruf sollte sich ja recht einfach gestalten mittels Lazarus.
Johannes

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: auf gconf & KDE zugreifen

Beitrag von theo »

War da nicht noch was mit xdg-mime query default text/html ?

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: auf gconf & KDE zugreifen

Beitrag von wolfdec »

monta hat geschrieben:Mir ist zumindest nichts dergleichen was als Pascalunit vorliegt bekannt.

Das ganze wird ja auch noch umfrangreicher, KDE4 und KDE3 ist ja ein gewaltiger Unterschied. Und wenn ich mal ketzerisch fragen darf (weiß ja nicht, was du genau machen willst), was ist mit anderen Umgebungen, die nicht Gnome oder KDE heißen? :wink:

Ich fürchte fast, das beste ist das Aufrufen über die Konsole (bspw. gconftool für alles mit gconf) und parsen des Outputs, damit kommst du wahrscheinlich am besten an deine benötigten Angaben, bzw. kannst auch einfach Werte setzen. Der Aufruf sollte sich ja recht einfach gestalten mittels Lazarus.
du hast sicher recht, damit. Jede Umgebung bietet ihr eigenes, alles supporten geht nicht.

Fall A)
Ich gehe davon aus, es gibt
a ) reine KDE-Anwendungen
b) reine Gnome-Anwendungen
Beide bieten eine Art "Registry", entsprechende KDE/Gnome-Programme nutzen diese auch.
An der Stelle Wäre es sinnvoll, dasss eine Anwendung auch beides Nutzen könnte.
findet man weder das eine, noch das andere vor wird eine eigene CONF erstellt,
für die nötigen Anforderungen wird der Benutzer direkt gefragt.

Ich hasse es, wenn ich bei jedem Programm alle Daten neu eingeben muss, die sowieso bereits hinterlegt sind.
Will der Anwender etwas Abweichendes, kann er es selbst einrichten.

Nutzt ein Anwender etwas anderes als KDE oder Gnome, ist er in der Regel ein erfahrenerer User,
der kann sich entsprechend die Einstellungen ebenfalls selbst machen.

Fall B)
Mir gefallen einige manchmal gefallen mir einige Konfigurationstools nicht. Mal zu überladen, mal nicht tiefgreifend genug. Dann wäre es für mich ganz natürlich direkt in die "Konfiguration" zu schreiben nutzen.

Über Konsolenprogramme ist zwar nett. Manchmal kommen Distributoren auf die Idee, diese mit ihren eigenen zu ersetzen, die Libs aber sind weiterhin verfügbar.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: auf gconf & KDE zugreifen

Beitrag von theo »

Hast du meinen xdg Hinweis oben gelesen?

Das müsste eig. für alle gehen: xdg-open index.html

http://portland.freedesktop.org/xdg-uti ... -open.html" onclick="window.open(this.href);return false;
http://portland.freedesktop.org/wiki/XdgUtils" onclick="window.open(this.href);return false;

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: auf gconf & KDE zugreifen

Beitrag von wolfdec »

theo hat geschrieben:Hast du meinen xdg Hinweis oben gelesen?

Das müsste eig. für alle gehen: xdg-open index.html

http://portland.freedesktop.org/xdg-uti ... -open.html" onclick="window.open(this.href);return false;
danke, werd ich mir noch mal genauer anschauen

Was bisher läuft:

Code: Alles auswählen

procedure TFormHelpViewer.RunBrowser(URI:String;MyAppName:String);
var
 MyProcess:TProcess;
begin
  if MyAppName ='' then
      MyAppName:=GetBrowser();
 
  if MyAppName = '' then
      ShowMessage('No Browser found! Please set Environmentvariable Browser');
 
  MyProcess := TProcess.Create(nil);
  {$IFDEF WINDOWS}
  if FileExistsUTF8(MyAppName) then
    begin
  {$ENDIF}
//       Run Browser with URI
      MyProcess.CommandLine:=MyAppName + ' ' + PAnsiChar(trim(URI));
      MyProcess.Execute;
   {$IFDEF WINDOWS}
    end
   else ShowMessage('Browser " ' + MyAppName + ' " Not Found!');
   {$ENDIF}
  MyProcess.Free;
end;
 
 
function TFormHelpViewer.GetBrowser(): string;
var
 MyAppName:String;
 {$IFDEF WINDOWS}
 Reg:TRegistry;
 Result:String;
 RegKey:String;
 ReadKey:Boolean;
 {$ENDIF}
 
begin
  {$IFDEF MAC}
    ShowMessage('Not implemented yet for Mac!');
    exit;
  {$ENDIF}
 
  {$IFDEF WINDOWS}
  ReadKey:= TRUE;
  if  MyAppName <> '' then
    begin
      if FileExistsUTF8(MyAppName) then ReadKey := FALSE;
    end;
 
  if ReadKey then
  begin
    //http://www.delphipraxis.net/topic149116_mehrere+instanzen+des+standardbrowsers+aufrufen.html&highlight=standardbrowser
    RegKey:='\http\shell\open\command';
    Reg:=TRegistry.Create(KEY_READ);
      try
        Reg.RootKey:=HKEY_CLASSES_ROOT;
        if Reg.OpenKeyReadOnly(RegKey) then
          Result:=Reg.ReadString('');
          if Result[1]='"' then begin
            delete(Result,1,1);
            Result:=copy(Result,1,pos('"',Result)-1);
          end;
      finally
      Reg.Free;
      MyAppName := PAnsiChar(Result); // GET Browser APP
      end;
  end;
  {$ENDIF}
 
  {$IFNDEF WINDOWS}
  // von Utils.pas > openBrowser()
  // lazarusforum.de
  //MyAppName := ExecProcessEx('gconftool-2 --get /desktop/gnome/url-handlers/http/command');
  //if (MyAppName = '') or (pos('errors',MyAppName) > 0) then
  //  MyAppName := GetEnvironmentVariable('BROWSER');
  //if (MyAppName = '') then
  //  MyAppName := 'kfmclient openURL %s';
  //MyAppName:=StringReplace(MyAppName,'%s','',[rfReplaceAll]);
  // End Utils.pas
  {$ENDIF}
  {$IFDEF LINUX}
   If (MyAppName='') then
     MyAppName:= 'xdg-open';
  {$ENDIF}
 
  result:= MyAppName;
end;
edit: hab den code noch mal geändert
Zuletzt geändert von wolfdec am Di 3. Feb 2009, 17:28, insgesamt 3-mal geändert.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: auf gconf & KDE zugreifen

Beitrag von Hitman »

Ich würde empfehlen, das als Setting im eigenen Programm zu verwalten. So handhabt es u.a. auch Netbeans. Selbst Pidgin bietet so eine Einstellung (nutzt aber durchaus als Standardeinstellung gconf ... logisch, als GTK/Gnome Programm).
Also am besten überlass es dem User, was er denn nun möchte (Default/gconf, Custom, und vlt. noch paar Presets wie Firefox, Mozilla/Seamonkey und Opera).

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: auf gconf & KDE zugreifen

Beitrag von wolfdec »

Hitman hat geschrieben:Ich würde empfehlen, das als Setting im eigenen Programm zu verwalten. So handhabt es u.a. auch Netbeans. Selbst Pidgin bietet so eine Einstellung (nutzt aber durchaus als Standardeinstellung gconf ... logisch, als GTK/Gnome Programm).
Also am besten überlass es dem User, was er denn nun möchte (Default/gconf, Custom, und vlt. noch paar Presets wie Firefox, Mozilla/Seamonkey und Opera).
Deshalb kann man der RunBrowser() die URL und auch den Browser übergeben. Da kommt noch eine Prozedur davor, die schaut ob in der Konfigruationsdatei, etwas gesetzt ist. Wird0 RunBrowser() eine Anwendung übergeben, wird diese genutzt, sonst schaut holt diese sich über GetBrowser() den aktuellen Browser.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: auf gconf & KDE zugreifen

Beitrag von creed steiger »

wolfdec hat geschrieben: 1. Wie kann ich feststellen, ob meine Anwendung gerade unter KDE oder Gnome läuft?
Vielleicht hilft das

Edit:Die Inspiration kam von hier
http://bbs.archlinux.org/viewtopic.php?id=24208&p=1" onclick="window.open(this.href);return false;
Dateianhänge
sysinfo.tar.gz
(3.32 KiB) 104-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: auf gconf & KDE zugreifen

Beitrag von theo »

@creed steiger: Schöne Sache, zeigt nur leider z.T. auch wieder wie kurzlebig solche Bemühungen sind.
Die Hauptdaten DE / WM / Kernel stimmen noch, aber der Rest geht bei meinem "Setup" bereits in die Hose.

bei readkde
config := tinifile.Create(getenvironmentvariable('HOME') + '/.kde4/share/config/kdeglobals');

bei kdeversion
kvers.CommandLine := 'kde4-config --version';

Beachte "kde4".

Bei einem Setup wie meinem (KDE3 und KDE4 parallel) müsste man noch KDE_SESSION_VERSION=4 oder 3 in die Rechnung einbeziehen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: auf gconf & KDE zugreifen

Beitrag von Christian »

Wiso erweiterst du nicht einfach die utils um die entsprechenden neuen Konfigurationen de du noch gefunden hast ? Eigene Suppe kochen is wohl immer leckerer. deswegen gibts auch so viel Software die mit YA*** anfängt, und dadurch wird pen Source eigentlich erst richtig sinnfrei.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: auf gconf & KDE zugreifen

Beitrag von creed steiger »

theo hat geschrieben:
Bei einem Setup wie meinem (KDE3 und KDE4 parallel) müsste man noch KDE_SESSION_VERSION=4 oder 3 in die Rechnung einbeziehen.
Ehrlich gesagt hab ichs mit KDE4 nicht getestet(nicht installiert).
Könntest du mal
kde${KDE_SESSION_VERSION}-config --version
bei dir probieren.

Unter KDE3 funktioniert es korrekt.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: auf gconf & KDE zugreifen

Beitrag von theo »

Code: Alles auswählen

theo@linux-1mxm:~> kde${KDE_SESSION_VERSION}-config --version
Qt: 4.4.3
KDE: 4.1.3 (KDE 4.1.3) "release 4.9"
kde4-config: 1.0
Scheint zu klappen.

Antworten