[Gelöst]Raspbian Autostart: Anwendung als Root ausführen

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

[Gelöst]Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

Hallo,

ich versuche schon seit einiger Zeit eine, in Lazarus geschriebene, grafische Anwendung automatisch mit Root-Rechte zu starten.

Das ganze läuft auf einem RaspberryPi mit Touchscreen und soll später stand alone, also ohne Netzwerk, Internet laufen. Da der RaspPi keine Uhr hat, die auch im abgeschalteten Zustand läuft, soll das auszuführende Programm beim Programmstart die Systemzeit setzen (über eine Eingabemaske wir Zeit und Datum vom Benutzer abgefragt). Dazu sind ja Root-Rechte von Nöten.

so versuche ich zur Zeit die Systemzeit zu setzen:

Code: Alles auswählen

 
DateTimeToSystemTime(DateTime, SystemTime);
  with SystemTime do begin
    SetTime(Hour, Minute, Second, Millisecond);
    SetDate(Year, Month, Day);
  end;     
 


und so schaut zur Zeit meine .desktop-Datei aus (/home/pi/.config/autostart/kasse.desktop)

Code: Alles auswählen

 
[Desktop Entry]
Name="Kasse"
Comment="simple Cashdesk"
Type=Application
Path=/home/pi/Projekte/Kasse/
Exec=/home/pi/Projekte/Kasse/Registrierkasse
#Terminal=false
 


Also wie kann ich das Programm automatisch als Root starten lassen?
Zuletzt geändert von Thandor am Mo 9. Jan 2017, 21:46, insgesamt 1-mal geändert.

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Mathias »

Da der RaspPi keine Uhr hat, die auch im abgeschalteten Zustand läuft,

Wieso nicht so etwas nehmen ?

http://www.raspberry-pi-geek.de/Magazin ... eitangaben
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

Also zunächst bin ich ja nicht der Projectowner.
Eine Vernünftige Quelle für dieses Bauteil habe ich leider auch noch nicht gefunden. Entweder zahlt man mal eben den Produktpreis als Versandkosten drauf, oder es kommt aus China, wo man nie weiß wann und ob es ankommt. Sorry von "China-Bestellungen" habe ich momentan die Nase voll.

Wenn es gut läuft wird die Maschine nur einmal im Jahr neu gestartet. Also selten, da ist die manuelle Eingabe der Zeit verkraftbar.

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

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von creed steiger »

Systemzeit vom Benutzer setzten zu lassen ist aus verschiedenen Gründen keine gute Idee.
z.B. Backup, austauschen von Dateien nach der Timestamp, Logfiles, ... etc.

Davon abgesehen würde dann das ganze Programm als Root laufen, was auch nicht sauber ist.

Wenn es unbedingt sein muß mach einen extra "Zeitsetzer" der mit sudo aufgerufen wird und die Zeit setzt und dann dein Programm aufruft.

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

creed steiger hat geschrieben:[...]
Wenn es unbedingt sein muß mach einen extra "Zeitsetzer" der mit sudo aufgerufen wird und die Zeit setzt und dann dein Programm aufruft.


Dann habe ich aber immer noch das selbe Problem nur eben nicht mit der Hauptanwendung sondern dann mit dem Zeitsetzer.

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Socke »

Thandor hat geschrieben:
creed steiger hat geschrieben:[...]
Wenn es unbedingt sein muß mach einen extra "Zeitsetzer" der mit sudo aufgerufen wird und die Zeit setzt und dann dein Programm aufruft.


Dann habe ich aber immer noch das selbe Problem nur eben nicht mit der Hauptanwendung sondern dann mit dem Zeitsetzer.

Du könntest doch sudo damit beauftragen, den Zeitsetzer zu starten?
Wenn du schon externe Programme startest, kannst du auch das Linux-Tool date verwenden; dann musst du nicht einmal den Zeitsetzer programmieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von creed steiger »

Thandor hat geschrieben:
creed steiger hat geschrieben:[...]
Wenn es unbedingt sein muß mach einen extra "Zeitsetzer" der mit sudo aufgerufen wird und die Zeit setzt und dann dein Programm aufruft.


Dann habe ich aber immer noch das selbe Problem nur eben nicht mit der Hauptanwendung sondern dann mit dem Zeitsetzer.



was sudo bewirkt weißt du nicht oder hast du das überlesen?

man sudo

https://linux.die.net/man/8/sudo
https://de.wikipedia.org/wiki/Sudo

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

Ich weiß was Sudo bewirkt, mein Problem ist ich bekomme das nicht in den Autostart. Das Programm soll ja automatisch starten mit sudo.

Code: Alles auswählen

 
    [Desktop Entry]
    Name="Kasse"
    Comment="simple Cashdesk"
    Type=Application
    Path=/home/pi/Projekte/Kasse/
    Exec=/home/pi/Projekte/Kasse/Registrierkasse
    #Terminal=false
 

 
wenn ich jetzt statt

Code: Alles auswählen

Exec=/home/pi/Projekte/Kasse/Registrierkasse

Code: Alles auswählen

Exec="sudo /home/pi/Projekte/Kasse/Registrierkasse"
schreibe startet das Programm nicht.

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

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von creed steiger »

was machen die Anführungszeichen da, ist das Dekoration?

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Socke »

Thandor hat geschrieben:wenn ich jetzt statt

Code: Alles auswählen

Exec=/home/pi/Projekte/Kasse/Registrierkasse

Code: Alles auswählen

Exec="sudo /home/pi/Projekte/Kasse/Registrierkasse"
schreibe startet das Programm nicht.

sudo ist nicht für grafische Anwendungen geeignet. Einen Zeitsetzer (date) kann man hingegen problemlos per sudo starten.
Verwende gksudo oder kdesudo.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

creed steiger hat geschrieben:was machen die Anführungszeichen da, ist das Dekoration?


Ich habe es mit und ohne probiert, beides das gleiche. Und bitte lass doch dieses "von oben herab" Geschreibsel.

Socke hat geschrieben:Du könntest doch sudo damit beauftragen, den Zeitsetzer zu starten?
Wenn du schon externe Programme startest, kannst du auch das Linux-Tool date verwenden; dann musst du nicht einmal den Zeitsetzer programmieren.


Danke Socke,

dieser Tipp war der richtige, ich habe das jetzt so gelöst:

Code: Alles auswählen

 
  {$IFDEF UNIX}
    cmd := 'sudo date -s "' + FormatDateTime('mmm dd, yyyy hh:nn:ss', DateTime) + '"';
    if not RunCommand(cmd, CmdResponse) then begin
      ShowMessage(CmdResponse);
    end;
  {$ELSE}
    ...
 


jedoch sagt mir Lazarus dass RunCommand deprecated ist? Gibt es da einen Ersatz?

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Socke »

Thandor hat geschrieben:jedoch sagt mir Lazarus dass RunCommand deprecated ist? Gibt es da einen Ersatz?

Es sind nur die Versionen von RunCommand deprecated, in denen eine ganze Befehlszeile angegeben ist. Wird das Programm und die Parameter getrennt angegeben, gibt es weniger Probleme (besonders in komplexen Situationen).

Versuch mal:

Code: Alles auswählen

var outstr: String;
begin
  if RunCommand('sudo', ['date', '-s', FormatDateTime('mmm dd, yyyy hh:nn:ss', DateTime)], outstr, [poWaitOnExit]) then
  // ...
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von creed steiger »

Socke hat geschrieben:
Thandor hat geschrieben:wenn ich jetzt statt

Code: Alles auswählen

Exec=/home/pi/Projekte/Kasse/Registrierkasse

Code: Alles auswählen

Exec="sudo /home/pi/Projekte/Kasse/Registrierkasse"
schreibe startet das Programm nicht.

sudo ist nicht für grafische Anwendungen geeignet. Einen Zeitsetzer (date) kann man hingegen problemlos per sudo starten.
Verwende gksudo oder kdesudo.



seltsam, das wäre mir neu.
sudo funktioniert für graphische Anwendungen doch ohne Probleme.
Ich habs grad auf meine Pi probiert, funzt ohne Probleme.
Dateianhänge
bild
bild
Zuletzt geändert von creed steiger am Mo 9. Jan 2017, 21:47, insgesamt 1-mal geändert.

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: Raspbian Autostart: Anwendung als Root ausführen

Beitrag von Thandor »

@Socke
Ja, das Funktioniert.
Jedoch musste ich "[poWaitOnExit]" wegnehmen, da RunCommand nur 3 Parameter akzeptiert.

Antworten