l'applicazione sudo + x11 non funziona correttamente


3

Non sono riuscito a ottenere alcun programma che richiedesse x11 (ad esempio gedit, nautilus) per funzionare con sudo. L'uso di gksudo fallirebbe silenziosamente, mentre sul terminale ho ricevuto il seguente errore:

sudo nautilus

** (nautilus:4160): WARNING **: Command line `dbus-launch --autolaunch=cced40b4aa1d252bc89d3a6a0000000a --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n
Could not parse arguments: Cannot open display: 

Con l'aiuto di un amico sono riuscito a trovare una soluzione alternativa: se corro xhost + come utente non privilegiato e quindi export DISPLAY=:0come root dopo un sudo su, finalmente funziona (senza il passaggio xhost otterrei un errore di protocollo indefinito). Comunque non capisco perché ho questo problema in primo luogo, ed è una faticosa soluzione alternativa - ho pensato di aggiungere un `export DISPLAY =: 0" nel .bashrc di root ma che viene chiamato solo se sto facendo causa, non se solo sudo.

Qualche idea su come risolvere correttamente questo problema?


1
@BenjiWiebe, il fatto è che nulla di tutto ciò dovrebbe essere necessario in un'installazione Ubuntu. Dovrebbe funzionare fuori dalla scatola. Manuhalo, hai cambiato qualcos'altro che potrebbe essere rilevante? È una nuova installazione? Ha funzionato?
terdon,

@terdon è la macchina che uso al lavoro, non una nuova installazione. Non ricordo di aver fatto confusione con / etc / sudoers, ma potrei essermene dimenticato di nuovo. Comunque, problema risolto, grazie mille!
manuhalo,

Risposte:


2

In generale, ricordati di includere il tuo sistema operativo (immagino che tu sia su Linux) e la distribuzione.

Per impostazione predefinita, il server X non consente ad altri utenti (ad esempio root nel tuo caso) di connettersi a un'istanza X esistente. Questo può essere ignorato con il xhost +comando, dopodiché root può connettersi alla tua sessione X esistente.

L'esportazione di DISPLAY non dovrebbe essere necessaria, ne sei sicuro? Dovresti essere ok semplicemente correndo xhost +e poi sudo gedito qualunque altra cosa. In tal caso ( e non ti preoccupi del leggero rischio per la sicurezza ) puoi aggiungere xhost +al tuo ~/.bashrc.


Come soluzione orribile, potresti eseguire sudospecificando la $DISPLAYvariabile:

sudo DISPLAY=:0 gedit

Per automatizzare, puoi aggiungere queste righe al tuo ~/.bashrc:

xhost + 
alias sudo='sudo DISPLAY=:0'

Questo è un trucco orribile, e vorrei sapere come sei riuscito a metterti in una situazione in cui è necessario :). Come ho detto nel mio commento sopra, questo dovrebbe davvero funzionare immediatamente su Ubuntu (e sulla maggior parte degli altri moderni sistemi desktop Linux). L'ultima volta ho dovuto giocherellare con xhost e DISPLAY quando lavoravo con RedHat circa 10 anni fa ...


grazie per la risposta, sono su Ubuntu 12.04 a 64 bit. L'esportazione DISPLAY era effettivamente necessaria, poiché dall'errore sopra (e dall'esecuzione echo $DISPLAY) abbiamo notato che quella variabile env non era stata impostata per qualche motivo. L'aggiunta xhost +nel mio .bashrc rimuoverà la necessità di quel comando, ma il problema è in realtà l'esportazione DISPLAY, che deve essere eseguita come root. Idealmente, vorrei evitare di citare in root e usare solo sudo.
manuhalo,

@manuhalo Solo un'idea, ti sei assicurato che DISPLAY fosse aggiunto alla variabile env_keep in / etc / sudoers?
BenjiWiebe,

@BenjiWiebe hai ragione, quella era ovviamente la cosa giusta da fare. Si scopre che il mio env_keep aveva solo "http_proxy" per qualche motivo. Accetterei la tua risposta se non fosse un commento :)
manuhalo,

@manuhalo Oops. La prossima volta, quando avrò un'onda cerebrale, la gonfierò con parole inutili e la pubblicherò come una risposta in modo da ottenere punti rep ... e poi venir sottovalutato ...;)
BenjiWiebe

@BenjiWiebe, ho appena votato un'altra tua risposta (che lo meritava comunque) per compensare :).
terdon,


0

Durante l'esecuzione delle applicazioni richieste sudoho ricevuto il seguente errore:

sudo gadmin-samba 
debug1: client_input_channel_open: ctype x11 rchan 3 vittoria 65536 max 16384
debug1: client_request_x11: richiesta da 127.0.0.1 37270
debug1: canale 1: nuovo [x11]
debug1: conferma x11
Connessione X11 rifiutata a causa di un'autenticazione errata.
debug1: canale 1: gratuito: x11, nchannels 2

(gadmin-samba: 2166): Gtk-WARNING **: impossibile aprire display: hostname: 10.0


Per far funzionare le applicazioni come root o via sudoho dovuto seguire queste istruzioni qui

  • accedi tramite

    ssh username@machine -X
    
  • rispetto al tipo di accesso

    xauth list $DISPLAY
    
  • L'output sarà simile a questo

    hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    
  • Copia l'intera riga.

  • Che fare

    sudo xauth add hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    
  • o accedi come root su rooto sudo -ie quindi digita

    xauth add hostname:10  MIT-MAGIC-COOKIE-1  47c3222525f807fc9e8b5fb56e7fee2a
    

prequisite

  • SSH
  • xauth

  • Il file di configurazione ssh sul server deve contenere le seguenti righe:

X11 Inoltro sì
X11DisplayOffset 10
X11Utilizzare l'host locale n
  • SSH sul lato client deve essere eseguito con capitale -Xe per la risoluzione dei problemi-v

    ssh -X -v username@machine
    

Digitare echo $DISPLAYper verificare se l'inoltro x11 funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.