Uso Linux y me gusta hacer todo mi trabajo de línea de comandos dentro de una sola sesión de pantalla, para poder reiniciar mi inicio de sesión gráfico y tal sin perder mis terminales. Sin embargo, cuando salgo y vuelvo a mi sesión gráfica, esto cambia todas las variables de entorno de mi sesión, como las sesiones DBus. Esto significa que después de iniciar sesión nuevamente, mi sesión de pantalla ahora tiene las variables de entorno antiguas (e incorrectas). Entonces, cuando trato de iniciar programas gráficos desde mi sesión de pantalla, en el mejor de los casos emiten una advertencia sobre no poder conectarse al bus de sesión. En el peor de los casos, no pueden comenzar por completo.
Entonces, lo que estoy buscando es una forma de modificar las variables de entorno en una instancia de pantalla en ejecución, para que todas las ventanas de pantalla creadas posteriormente hereden las nuevas variables de entorno. ¿Hay alguna forma de hacer esto?
fuente
setenv [var [string]] Set the environment variable var to value string. If only var is specified, the user will be prompted to enter a value. If no parameters are specified, the user will be prompted for both variable and value. The environment is inherited by all subsequently forked shells.
Respuestas:
No puede iniciar un script de shell desde la
screen
sesión ya que heredaría el entorno anterior. Sin embargo, puede usar un quince para obtener las nuevas variables de entorno en la sesión de pantalla anterior. Puede completar esa cantidad cuando comience su sesión gráfica.Inicie ese script en segundo plano al iniciar sesión (solo terminará cuando se lean todas las variables).
Ahora puede leer desde el fifo, por ejemplo, agregue esta función a su
.bashrc
para que puedas en tu
screen
sesión anteriorfuente
screen
. AFAIKscreen
no expone enchufes o similares para comunicarse con sesiones en ejecución desde el exterior.screen
sesión ya tiene las variables de entorno recientesHe implementado un script para hacer esto. Puede obtenerlo aquí: https://github.com/DarwinAwardWinner/screen-sendenv
Después de ponerlo
screen-sendenv.py
en su$PATH
, puede usar el siguiente fragmento en su .bashrc:Para usarlo, solo ejecute
screen_pushenv
antes de ejecutarscreen -r
para volver a conectar a su sesión de pantalla. Luego, después de adjuntar conscreen -r
, puede actualizar el entorno en sus shells existentes conscreen_pullenv
. Las funciones tmux logran lo mismo para tmux, otro multiplexor de terminal similar a la pantalla.fuente
screen_update
ytmux_update
. Actualizaré mi respuesta con una versión independiente de byobu de estos.setenv
, veo cómo esto es mejor. No era obvio por el código al que te vinculaste. ¡Gracias de nuevo!Puede invocar el
setenv
comando para cambiar las variables de entorno en el proceso de la pantalla de forma interactiva, utilizando: Ctrl- A+:setenv
(Tenga en cuenta el:
carácter para ingresar un comando de pantalla). Se le solicitará el nombre y el valor de la variable de entorno.Tenga en cuenta que (según otras respuestas / comentarios) esto afecta el proceso de pantalla (principal) y, por lo tanto, las sesiones de pantalla recién creadas, pero no su sesión de pantalla actual ni ninguna sesión de pantalla existente.
Puede especificar el nombre y el valor de la variable de entorno al mismo tiempo si desea: Ctrl- A+
:setenv DISPLAY :100
. Establecerá la PANTALLA en ": 100" para las nuevas sesiones de pantalla.Para eliminar una variable de entorno, puede usar 'unsetenv', por ejemplo Ctrl, A+
:unsetenv DISPLAY
fuente
Esta es probablemente una solución más simple (usted decide). La parte importante es el alias que llama a la
savedisplay
función cada vez quescreen
se ejecuta el comando. Los comandos no se ejecutan automáticamente, por lo tanto, se pueden poner en~/.bashrc
lugar de algo muy especializado como~/.ssh/rc
.fuente