2016-08-04 34 views
1

Ich schreibe eine Cross-Plattform-App, die ich gerne auf Linux-basierten Betriebssystemen wie Fedora und Ubuntu ausführen würde. Ich benutze QSerialPort und es funktioniert gut. Ich kann QSerialPortInfo verwenden, um eine Liste von seriellen Ports im System zu erhalten und sie dem Benutzer zu präsentieren, der auswählen kann, welchen er/sie verwenden möchte.Wie fordere ich serielle Zugriffsrechte mit Polkit unter Linux an?

Auf Linux-Systemen hat der Benutzer jedoch standardmäßig keine Berechtigungen für die seriellen Ports. Ich weiß, dass es falsch ist, meine App mit sudo zu starten, und ich weiß auch, dass es nicht benutzerfreundlich ist, den Benutzer zu bitten, chmod 666 auf der seriellen Schnittstelle jedes Mal manuell zu starten, wenn die App verwendet wird. Also habe ich mich umgesehen und es scheint mir, dass Polkit die Antwort ist, aber ich konnte kein Beispiel finden, das mir zeigen würde, wie es geht.

Können Sie mir bitte sagen, wie man polkit (ehemals PolicyKit genannt) verwendet, um die Erlaubnis zu beantragen, dass meine App eine bestimmte serielle Schnittstelle verwendet?

EDIT:

Was ich suche ist eine Möglichkeit, zu:

  1. Überprüfen Sie, ob der Benutzer Zugriff auf die serielle Schnittstelle hat
  2. Wenn nicht, einen Dialog Pop-up, dass fragt nach Erlaubnis (wie zum Beispiel die Gnome Einstellungen App)
  3. Wenn der Benutzer erfolgreich authentifiziert hat, stellen Sie den seriellen Port für die App zur Verfügung.

Einige weitere Gedanken

  • Ich möchte nicht über eine udev-Regel einrichten, die perimission jedem seriellen Port
  • ich den Benutzer fragen, nicht wollen, gibt ein Skript
  • laufen Ich möchte nicht, dass meine App als Superuser ausgeführt wird
  • Ich möchte keine anderen Aktionen als root ausgeführt werden, nur die serielle Schnittstelle Zugriff

Ja, ich habe die official polkit docs gefunden, aber sie sind nicht sehr klar, wie dies zu tun ist.

+1

Wie wäre es, den Benutzer zu UUCP/Dialout (oder revalent) Gruppe hinzufügen? –

+0

@Calvin Ich möchte den Benutzer nicht darum bitten. – Venemo

Antwort

1

Allgemeines Denken:


Es ist keine gute Idee, zu versuchen, eine Anwendung „universal“ zu machen.

Ich verstehe, dass Sie wollen, dass Ihre Software einfach zu bedienen ist, aber für solche Dinge (Systemeinstellungen) sollten Sie sich auf die Systempacker verlassen.

Polkit kann jederzeit durch eine andere Lösung ersetzt werden, oder der Name der Ressource kann geändert werden, oder was auch immer und Ihre Anwendung wäre nicht mehr verwendbar.

rate ich Ihnen zu:

  • höchstens ein polkit Fenster heben die
  • oder besser für Passwort fragen woulde, um Verteilungspaketen zu machen, die die notwendigen Optimierungen durch regelmäßige Skripte tun

eine Idee


ich es nicht tat (aber ich viel gespielt in der Vergangenheit mit pam :-))

Also hier sind Links, die ich gefunden und was ich verstanden:

  • polkit wirkt auf die gleiche Weise wie sudo tun: es können Sie Programm mit einer anderen Identität laufen (explanations)
  • so können Sie Ihr Programm entweder als root oder wie einer, der genug rechten Zugriff auf den seriellen

laufen so könnten Sie erstellen:

  • ein Installationsskript, mit dem Sie Ihr Programm mit der guten Identität ausführen können (z. example). Auf diese Weise würden Sie root-Passwort einmal (bei der Installation zum Erstellen der Polkit-Richtlinie) und jedes Mal, wenn der Benutzer Ihr Programm ausführen wollte. Diese Identität kann Root oder irgendeine Identität sein, solange diese Identität R/W-Zugriff hat.
  • eine Richtliniendatei: Sie können 1 oder documentation schauen entweder auf
  • ein Skript für Ihr Programm enthält so etwas wie dieses lauching: pkexec <path>/<pgm>

Hier sind einige Hinweise:

+0

'höchstens, werfen Sie ein Polkit Windows, das Passwort fragen würde '- können Sie mir zeigen, wie das geht? – Venemo

+0

schau dir meine aktualisierte "Antwort" an. – lemmel

+0

Sorry, aber bisher hast du mir nichts gesagt, was ich nicht schon wusste. Wie ich in meiner Frage gesagt habe, habe ich bereits die Polkit-Dokumente gefunden, habe aber noch nie ein konkretes Beispiel gesehen und die Dokumente sind sehr kryptisch. – Venemo