Frage Starten Sie das spezifische Terminal beim Start


Ich habe eine Anwendung mit libpcap und ncurses codiert. Offensichtlich soll diese Anwendung im Terminal laufen.

Daher habe ich ein Skript erstellt, das meine Anwendung in gnome-terminal mit einer festen Größe startet:

#!/bin/sh
gnome-terminal --geometry=75x36+0+0 --command="myapplication"'

Ich möchte das beim Start ausführen (nachdem der Desktop des aktuell angemeldeten Benutzers angezeigt wurde). Es ist wichtig, dies als root auszuführen. Andernfalls kann libpcap nicht nach Paketen suchen. Ich bin mir aller Risiken bewusst.

Ich habe Folgendes erstellt .service Datei:

[Unit]
Description=My Application

[Service]
User=root
Type=simple
ExecStart=/usr/local/bin/myshellfile

[Install]
WantedBy=multi-user.target

Und ich habe es eingefügt /etc/systemd/system/myservice.service und voreinstellen mit

sudo systemctl preset myservice.service

Trotzdem funktioniert es nicht. Was mache ich hier falsch? Ubuntu 16.04 wird in einem aktualisierten Zustand ausgeführt.


1
2017-10-17 09:06


Ursprung


Sollte das Terminal offen bleiben? Sie können Startup-Anwendungen verwenden. Ich habe eine Idee, wie das gemacht werden könnte. - pa4080
@ pa4080 Genau! Meine Anwendung hat eine CLI, also muss sie geöffnet bleiben. Seine Blockierung btw - so, sobald Sie die Anwendung ausführen, bleibt es geöffnet und schließt sich nicht :) - TacoVox
Hallo, TacoVox, Entschuldigung für die verspätete Antwort, aber ich hatte vorher nicht genug Freizeit. - pa4080


Antworten:


Es gibt wenige Möglichkeiten, die GUI-Anwendung zu starten (z. B. Gmome-Terminal) beim Systemstart und vielleicht am besten zu verwenden ist Startanwendungen (sehen ebenfalls). Auf diese Weise wird die App gestartet, wenn sich der Benutzer anmeldet. (In jeder anderen Methode sollten wir einige Desktop-Envvars exportieren, um dies tun zu können.)


Um meine Antwort testen zu können, habe ich eine ausführbare Datei erstellt, genannt myapp, gelegen in /usr/local/bin. Es fügt nur das aktuelle Datum und die Uhrzeit in einer Datei in der /root Verzeichnis, so dass wir root (sudo) Berechtigungen benötigen, um das Skript auszuführen:

#!/bin/bash
date >> /root/date.txt

Wir können einem bestimmten Benutzer Berechtigungen erteilen, um einen Befehl ohne Passwort über auszuführen sudo. Egal, ob der Benutzer der sudoers Gruppe oder nicht. Wir können benutzen sudo visudo sicher bearbeiten /etc/sudoers und füge eine oder mehrere Zeilen hinzu:

user1 ALL=(ALL) NOPASSWD: /usr/local/bin/myapp
user2 ALL=(ALL) NOPASSWD: /usr/local/bin/myapp

Die bessere Idee ist zum Beispiel eine separate Datei zu erstellen /etc/sudoers.d/myapp, wo diese Regeln stehen. Zu diesem Zweck verwenden wir den Befehl: sudo visudo -f /etc/sudoers.d/myapp.

Jetzt user1 und user2 sollte laufen können sudo myapp ohne Passwort.

Hinweis: Verwenden Sie immer den Befehl visudo um das zu bearbeiten sudoers Datei, um sicherzustellen, dass Sie sich nicht aus dem System ausschließen - nur in   Falls Sie versehentlich etwas falsches in die sudoers Datei.    visudo speichert Ihre geänderte Datei an einem temporären Speicherort und wird    nur Überschreibe das Reale sudoers Datei, wenn die geänderte Datei ohne Fehler analysiert werden kann ... Quelle.


Der nächste Schritt besteht darin, das Startskript zu ändern. Nennen wir es myapp_startup und platziere es im selben Verzeichnis /usr/local/bin. Der Skript-Inhalt sollte sein:

#!/bin/sh
gnome-terminal --geometry=75x36+0+0 -x bash -c "sudo myapp; exec bash"
  • Eine detaillierte Erläuterung des obigen Befehls wird bereitgestellt Hier.
  • Wenn Sie das Fenster automatisch minimieren möchten, verwenden Sie: Dies Ansatz.

Jetzt können wir einen Eintrag in erstellen Startanwendungen als das:

enter image description here

  • Zusätzlich können wir das Startskript auf diese Weise modifizieren: sleep 3 && gnome-terminal ... um das neue Terminalfenster zu starten, nachdem der gesamte Desktop initialisiert wurde.
  • Wenn sich das Skript nicht in einem Verzeichnis befindet, das dem Benutzer hinzugefügt wird $PATH variabel (echo $PATH) Wir sollten den vollständigen Pfad verwenden, zum Beispiel: /usr/local/bin/myapp_startup.

Weiterführende Literatur:

  • Anstatt von Gnome-Terminal wahrscheinlich können Sie verwenden tmux (oder ein anderer Session Manager) wie es beschrieben wird in dieser Antwort.

  • Zusätzlich können Sie das Startscript über Cron (oder eine andere eingeschränkte Umgebung) vom Skript starten cron-gui-launcher.bash aus diesem Projekt: https://github.com/pa4080/cron-gui-launcher. Dieses Skript wird den Benutzer wartet um sich einzuloggen und all DE Variablen dann exportieren, etc ... Aber im aktuellen Fall wird das endgültige Ergebnis das gleiche sein, wie wir Startup-Anwendung.


1
2017-10-24 12:40