Domanda

Ho un'applicazione UI (usa GTK) per Linux, che richiede di essere eseguito come root (che legge e scrive / dev / sd *).

Invece di richiedere all'utente di aprire una shell di root o utilizzare "sudo" manualmente ogni volta, quando si lancia la mia app, mi chiedo se l'applicazione può utilizzare alcune API OS-fornita per ottenere i permessi di root. (Nota:. Gtk app non possono utilizzare la modalità "setuid", in modo che non è un'opzione qui)

Il vantaggio qui sarebbe un flusso di lavoro più facile:. L'utente potrebbe, dal suo account utente predefinito, fare doppio clic su mia app dal desktop, invece di dover aprire un terminale di root e lanciare da lì

Lo chiedo perché OS X offre esattamente questo: Un'applicazione può chiedere al sistema operativo di lanciare un eseguibile con i permessi di root - il sistema operativo (e non l'applicazione) poi chiede all'utente di inserire le sue credenziali, li verifica e poi lancia il bersaglio come desiderato.

Mi chiedo se ci sia qualcosa di simile per Linux (Ubuntu, per esempio).

Chiarimento:

Così, dopo il suggerimento a PolicyKit mi chiedo se posso usare che per ottenere r / w l'accesso ai "/ dev / sd ..." dispositivi a blocchi. Trovo il documention abbastanza difficile da capire, così ho pensato che avevo prima chiedere se questo è possibile a tutti prima di spendere ore a cercare di capire invano.

Aggiornamento:

L'applicazione è uno strumento di riparazione del disco azionato a distanza per l'utente unsavvy Linux, e quei niubbi Linux non avrà molto la comprensione di usare sudo o anche cambiare le appartenenze ai gruppi di loro utenti, soprattutto se il loro disco appena iniziato a recitare e si' ri andando fuori di testa. Ecco perché cerco una soluzione che evita tecnicismi come questo.

È stato utile?

Soluzione

Il modo vecchio, semplice ma ora in fase di esaurimento, è gksu . Qui è la discussione sul futuro di gksu.

Il nuovo modo è quello di utilizzare PolicyKit . Io non sono molto sicuro di come questo funziona, ma penso che è necessario per lanciare la vostra applicazione utilizzando il comando pkexec.

UPDATE:

Guardando il codice di esempio su http://hal.freedesktop.org /docs/polkit/polkit-apps.html , sembra che è possibile utilizzare PolicyKit per ottenere l'autorizzazione per certo azioni che sono descritti dai file .policy in /usr/share/polkit-1/actions. L'azione per l'esecuzione di un programma come un altro utente è org.freedesktop.policykit.exec. Io non riesco a trovare un'azione per accedere direttamente i dispositivi a blocchi, ma devo ammettere, la documentazione PolicyKit rompe il mio cervello troppo.

Così, forse il corso più semplice di azione per voi è quello di separare il codice disco pressare che richiede privilegi in una riga di comando, ed eseguire che dalla vostra applicazione GUI utilizzando g_spawn_[a]sync() con pkexec. In questo modo non avrebbe dovuto preoccuparsi di azioni richiedente e questo genere di cose. E 'probabilmente una cattiva pratica in ogni caso per eseguire l'applicazione GUI intero come root.

Un altro suggerimento è quello di chiedere l'autore di PolicyKit (David Zeuthen) direttamente. Oppure provate pubblicare la tua domanda alla lista gtk-app-devel.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top