Come posso impostare il PERCORSO o altre variabili d'ambiente in modo che le app X possano accedervi?


16

Come posso impostare le variabili env in modo che KDE le riconosca?

Come si imposta il percorso in un ambiente non shell (KDE)?

A differenza delle due domande precedenti, voglio sapere come fare per GNOME. O meglio ancora, esiste un metodo indipendente dal gestore delle finestre. Per la shell / terminale, di solito modifico ~/.bashrc. Dove posso inserire le dichiarazioni di esportazione in modo che le variabili di ambiente siano disponibili per tutte le applicazioni X, indipendentemente dal gestore delle finestre utilizzato?

Risposte:


12

Il modulo PAM pam_env consente di impostarli in /etc/environmento in ~/.pam_environment, a seconda che lo si desideri per tutti gli utenti (a livello di sistema) o solo per l'utente (a livello di sessione).

Variabili d'ambiente a livello di sistema

Le impostazioni delle variabili di ambiente che incidono sul sistema nel suo complesso (piuttosto che solo su un determinato utente) non devono essere inserite in nessuno dei tanti script a livello di sistema che vengono eseguiti quando il sistema o la sessione desktop vengono caricati, ma in

/etc/environment- Questo file è specifico per le impostazioni delle variabili di ambiente a livello di sistema. Non è un file di script, ma consiste piuttosto di espressioni di assegnazione, una per riga. In particolare, questo file memorizza le impostazioni locali e del percorso a livello di sistema.

Variabili d'ambiente a livello di sessione

Le impostazioni delle variabili di ambiente che dovrebbero interessare solo un determinato utente (piuttosto che l'intero sistema) dovrebbero essere configurate in:

~/.pam_environment- Questo file è specifico per l'impostazione dell'ambiente dell'utente. Non è un file di script, ma consiste piuttosto di espressioni di assegnazione, una per riga.

Nota: l'utilizzo .pam_environmentrichiede un nuovo accesso per inizializzare le variabili. Il riavvio del solo terminale non è sufficiente per poter utilizzare le variabili.

Scopri di più sul wiki di Ubuntu su Variabili d'ambiente .


2
Il problema con la ~/.pam_environmentsoluzione è che di default pam_env modulo non lo legge, a meno che la distribuzione non lo configuri diversamente. Su Fedora 20 non è letto per esempio.
Cristian Ciupitu,

@CristianCiupitu ha ragione. ~/.xsessioncaricherà le variabili di ambiente per le applicazioni X. Vedi unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek

@CristianCiupitu: Grazie mille per il tuo commento che mi ha portato a pam_env. Ho aggiornato i miei file pam Fedora 24 per abilitare l'ambiente utente. Ora tutte le mie sessioni su Wayland hanno di nuovo un PERCORSO personalizzato.
Zan Lynx,

@CristianCiupitu è ​​vero? La documentazione linux-pam.org/Linux-PAM-html/sag-pam_env.html implica che ~ / .pam_environment è il file predefinito da leggere se non diversamente specificato. Vedi la linea user_envfile=filename. Il mio problema con pam_env è che la variabile HOME potrebbe non essere disponibile a seconda dell'applicazione PAM. Il che limita il suo utilizzo a sole variabili assolute.
CMCDragonkai,

2
@CMCDragonkai, la pagina man pam_env (8) di Fedora diceva: " Di default questa opzione è disattivata poiché le variabili di ambiente fornite dall'utente nell'ambiente PAM potrebbero influenzare il comportamento dei moduli successivi nello stack senza il consenso dell'amministratore di sistema" . Pertanto, mentre il modulo PAM upstream ha alcune impostazioni predefinite, alcune distribuzioni le sovrascrivono.
Cristian Ciupitu,

1

/etc/X11/Xsession.d/... o lungo le linee di quella directory, a seconda del tuo Linux (?). Ho scritto un po ' qui .

Il concetto è che dopo il login, un display manager avvia una "Xsession" e genera (!) Tutto in quella directory in ordine alfabetico. Puoi semplicemente aggiungere uno script che modifica il PERCORSO. Xsession sarà ininterrottamente il tuo DE e di solito tutti i processi sono figli di quella Xsession, quindi ereditando l'ambiente PATH.


Esiste un equivalente che posso impostare nella mia directory $ HOME? Ti piace .Xsession?
Code-Guru,

Secondo Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc variabili di ambiente globali di origine. Questo script genererà qualsiasi cosa in $ HOME / .xsessionrc se il file è presente. Ciò consente all'utente di impostare variabili di ambiente globali per la propria sessione X, ad esempio le informazioni sulla locale.
Bananguin,

1

Un processo eredita un ambiente dal processo padre che lo avvia. Per modificare il PERCORSO o altri valori di ambiente in un figlio, possiamo impostare una variabile su un valore nel padre ed esportare la variabile se siamo in una shell, quindi avviare il processo figlio. Il bambino può anche leggere uno o più file di inizializzazione per cambiare il proprio ambiente all'avvio.

Quindi, ci sono altre due domande per ottenere una risposta:

Qual è l'albero di eredità padre / figlio che porta al processo che si desidera venga influenzato dal PERCORSO o dalla modifica dell'ambiente?

Quali file di inizializzazione vengono utilizzati / letti / provenienti dai processi pertinenti in quell'albero?

Ecco parte dell'output di ps (1) per mostrare cosa intendo per albero ereditario:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

Nota le sequenze grafiche \ _ e i numeri PIP / PPID (ID processo e PID padre). Il PID 1855 è stato avviato da (un figlio di?) 1497, avviato dal 1481, avviato dal PID 1, avviato dal processo antenato 0.

Esegui una traccia ereditaria simile per il processo che desideri influire, scopri quali file di inizializzazione sono rilevanti e apporta la modifica a PERCORSO da qualche parte nell'albero, probabilmente con qualcosa di simile a:

PATH=${PATH}:/usr/local/bin

Posso usare psper determinare il processo genitore di un login GUI?
Code-Guru,
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.