Sudo di app grafiche e "Invalid MIT-MAGIC-COOKIE-1"

Tags: 

Problema: eseguite una applicazione grafica tramite terminale che necessità di permessi di root, ad esempio "kcalc".

Il risultato è questo...

sudo kcalc
Invalid MIT-MAGIC-COOKIE-1 keykcalc: cannot connect to X server :0

Il problema si presentava su Arch Linux (nessun problema a riguardo su Ubuntu).

ll motivo del blocco riguarda i permessi per accedere ad X, lanciato da un altro utente, e l'accesso alle informazioni di autorizzazioni per questo collegamento.

Le soluzioni sono varie:

A: Usare un sudo grafico...

Ad esempio "kdesu", se si è su kde, quindi:

kdesu kcalc

Kdesu fa da ponte con l'applicazione da lanciare, e prevede già l'inizializzazione corretta dell'ambiente per permettere l'utilizzo di X da parte di root.

B: Dare temporaneamente le autorizzazioni all'accesso con xhost...

E' sufficiente eseguire questo comando:

xhost +

In questo modo si dice al sistema che TUTTI possono accedere all'interfaccia grafica. Volendo possiamo anche metterlo nel nostro file .bashrc per eseguirlo a ogni shell (anche se questo rappresenterebbe un "buco di sicurezza" per il sistema, permettendo sempre a chiunque di accedere a X...)

C: Modificare la configurazione di sudo...

Usiamo il comando "visudo" per modificare l'ereditarietà delle variabili di ambiente quando facciamo sudo, in modo da far passare alcune variabili dalla shell. In particolare aggiungiamo a /etc/sudoers queste righe (NOTA: Non editiamo direttamente il file, ma usiamo appunto "visudo" che evita di far danni...)

Defaults env_keep += "DISPLAY XAUTHORITY"

Dovremo inoltre istruire la nostra shell ad esportare la variabile "XAUTHORITY" (contenente il percorso al file con le informazioni di autorizzazione per X). Aggiungiamo al file ~/.bashrc questa riga:

[ -n "$DISPLAY" -a -e "$HOME/.Xauthority" ] && export XAUTHORITY="$HOME/.Xauthority"

Dai prossimi terminali che avvieremo (ovviamente non su quelli già aperti) il nostro "sudo kcalc" funzionerà alla perfezione.

Aggiungi un commento

Scrivi la risposta in lettere (ad esempio "tre" e non "3")