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
screensesió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
.bashrcpara que puedas en tu
screensesión anteriorfuente
screen. AFAIKscreenno expone enchufes o similares para comunicarse con sesiones en ejecución desde el exterior.screensesió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.pyen su$PATH, puede usar el siguiente fragmento en su .bashrc:Para usarlo, solo ejecute
screen_pushenvantes de ejecutarscreen -rpara 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_updateytmux_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
setenvcomando 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 DISPLAYfuente
Esta es probablemente una solución más simple (usted decide). La parte importante es el alias que llama a la
savedisplayfunción cada vez quescreense ejecuta el comando. Los comandos no se ejecutan automáticamente, por lo tanto, se pueden poner en~/.bashrclugar de algo muy especializado como~/.ssh/rc.fuente