Link erstellen .. [ gelöst ]

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1632
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Link erstellen .. [ gelöst ]

Beitrag von corpsman »

Guten Morgen,

Ich hab mir hier ein Programm gebastelt, welches sich beim Reboot von Linux von allein wieder starten soll.

Also dachte ich mir ich fange die "Linux" beenden Nachricht ab, und erstelle dann einen Link im Autostart der meine Anwendung wieder startet.

Das Abfangen hab ich hin bekommen stand irgendwo hier im Forum :

Code: Alles auswählen

(*
Linux beenden
*)
 
Procedure SigTermHandler(Signal: Integer); cdecl;
Begin
  CreateLink('/home/corpsman/.kde/Autostart/wecker', paramstr(0), '');
End;
 
 
Initialization
 
  Libc.signal(SigHup, @SigTermHandler);
Doch zum erzeugen von Links hab ich nichts gefunden, also hab ich mir die mal selbst angesehen und mir folgende kleine Funktion gebastelt :

Code: Alles auswählen

Function CreateLink(Linkname: String; LinkTarget, Param: String): Boolean;
Var
  f: Textfile;
Begin
  result := false;
  If Not FileExists(Linkname + '.desktop') Then Begin
    Try
      assignfile(f, Linkname + '.desktop');
      rewrite(f);
      writeln(f, '[Desktop Entry]');
      writeln(f, 'Comment[en_US]=');
      writeln(f, 'Comment=');
      writeln(f, 'Exec=' + linkTarget + ' ' + Param);
      writeln(f, 'GenericName[en_US]=');
      writeln(f, 'GenericName=');
      writeln(f, 'Icon=exec');
      writeln(f, 'MimeType=');
      writeln(f, 'Name[en_US]=' + ExtractFileNameOnly(linkTarget));
      writeln(f, 'Name=' + ExtractFileNameOnly(linkTarget));
      writeln(f, 'Path=' + ExtractFilePath(LinkTarget));
      writeln(f, 'StartupNotify=true');
      writeln(f, 'Terminal=false');
      writeln(f, 'TerminalOptions=');
      writeln(f, 'Type=Application');
      writeln(f, 'X-DBUS-ServiceName=');
      writeln(f, 'X-DBUS-StartupType=');
      writeln(f, 'X-KDE-SubstituteUID=false');
      writeln(f, 'X-KDE-Username=');
      writeln(f, 'X-Ubuntu-Gettext-Domain=desktop_kdebase');
      closefile(f);
    Finally
      result := True;
    End;
  End;
End;
Das Irr-witzige ist das es auch zu gehen scheint, bis auf einen kleinen Schönheitsfehler.

Jedes mal wenn der Link ausgeführt werden soll kommt die Nachricht die ich auch als Dateianhang mit angehängt habe.

Ich gehe davon aus , das es daran liegt das meine erstellte Datei nicht als "Executable" markiert ist, sicher bin ich mir allerdings nicht ..

Doch selbst wenn das der Grund sein sollte, ist mir nicht klar wie man die Datei als Executable markiert, also hier die Frage an euch, kann mir das jemand von euch zeigen ?
Dateianhänge
snapshot1.png
snapshot1.png (15.38 KiB) 1311 mal betrachtet
Zuletzt geändert von corpsman am Mo 2. Nov 2009, 19:26, insgesamt 1-mal geändert.
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Link erstellen ..

Beitrag von Socke »

Wenn du lesen könntest, wüsstest du, dass alles in Ordnung ist. KDE fragt lediglich, ob dein Programm gestartet werden soll. Vielleicht bietet KDE noch andere Möglichkeiten an, die keine Meldung erscheinen lassen (auch wenn ich als Nutzer gerne wissen möchte, was denn so alles in meinem Autostart herum hängt).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Link erstellen ..

Beitrag von Targion »

Code: Alles auswählen

Function CreateLink(Linkname: String; LinkTarget, Param: String): Boolean;
Var
  f: Textfile;
  p: TProcess;
Begin
  result := false;
  If Not FileExists(Linkname + '.desktop') Then Begin
    Try
      assignfile(f, Linkname + '.desktop');
      rewrite(f);
      writeln(f, '[Desktop Entry]');
      writeln(f, 'Exec=' + linkTarget + ' ' + Param);
      writeln(f, 'Icon=exec');
      writeln(f, 'Name=' + ExtractFileNameOnly(linkTarget));
      writeln(f, 'Path=' + ExtractFilePath(LinkTarget));
      writeln(f, 'StartupNotify=true');
      writeln(f, 'Terminal=false');
      writeln(f, 'Type=Application');
      closefile(f);
    Finally
      result := True;
    End;
    p:=TProcess.Create(nil);
    p.Options:=[poWaitOnExit,poUsePipes,poStdErrToOutPut];
    p.CommandLine:='chmod +x '+Linkname + '.desktop';
    p.Execute;
    p.Free;
  End;
End;
Du kannst auch ein TIniFile verwenden :mrgreen: Das ist ein Sicherheitsmechanismus, um Programme nicht unabsichtlich starten zu lassen. Mit dem Code oben sollte es aber gehen. (Ein wenig entschlackt habe ich auch ;-))

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1632
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Link erstellen ..

Beitrag von corpsman »

Cool, thx, da war ich ja shcon fast an der Richtigen Lösung dran.
--
Just try it

Antworten