No se puede hacer el directorio '/ var / run / screen': permiso denegado

19

En algún momento, generalmente después de un choque o apagado repentino, se screenniega a comenzar. Comandos como

screen
screen -ls
screen -r
screen -d

dar como resultado la siguiente salida

No se puede hacer el directorio '/ var / run / screen': permiso denegado

¿Cuál es el problema aquí? ¿Cómo puedo arreglar esto?

Huey
fuente

Respuestas:

25

Encontró una solución que no requiere sudo regular en los reinicios

De 'Eric Z Ma' @ systutorials :

El directorio /var/run/screen/es el directorio de socket para la pantalla.

Afortunadamente, la pantalla lee una variable de entorno SCREENDIRpara obtener un directorio de socket alternativo.

Para evitarlo, puede crear un directorio, como ~/.screen:

mkdir ~/.screen && chmod 700 ~/.screen

y exportar SCREENDIRpara apuntar a ese directorio:

export SCREENDIR=$HOME/.screen

También puedes poner esta línea en ti ~/.bashrcpara que también surta efecto después.

Krease
fuente
20

Este problema ha sido documentado aquí . En breve,

/etc/rcS.d/S70screen-cleanup se ejecuta a través de un sistema de arranque mucho antes de lo que espera haberse ejecutado, y no está limpiando correctamente ese directorio.

Se puede arreglar con el siguiente comando

sudo /etc/init.d/screen-cleanup start
Huey
fuente
1
Esto funciona, pero tengo que ejecutarlo en cada inicio, de lo contrario obtendré el error una y otra vez.
Krease
2

Me encontré con esto mientras ejecutaba una distribución basada en Centos / RHEL 7, y no tiene nada llamado 'limpieza de pantalla' en ningún lugar bajo / etc.

Una solución que encontré fue simplemente ejecutar sudo screeny luego salir inmediatamente de ella.

Después de eso, pude ejecutar la pantalla sin ningún privilegio especial, por lo que parece limpiar / var / ejecutar adecuadamente cuando se me da la oportunidad.

Jay Taylor
fuente
0

TL; DR : en Debian Stretch y versiones posteriores, asegúrese de que systemd-tmpfiles-setup.servicese haya iniciado correctamente:

$:> systemctl status systemd-tmpfiles-setup.service
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: enabled)
   Active: active (exited) since Thu 2018-06-21 19:54:06 CEST; 41min ago
   ...

Si está deshabilitado ( Loaded: ... ;disabled; ...), es posible que desee habilitarlo con systemctl enable systemd-tmpfiles-setup.service. Si desea usar la pantalla dentro de un contenedor acoplable, entonces debe ejecutar systemd en la imagen de su contenedor o debe ejecutar systemctl start systemd-tmpfiles-setup.serviceo /etc/init.d/screen-cleanup start( como lo sugiere Huey ) cada vez después de iniciar sesión en su contenedor.

Detalles: desde Debian Stretch, el script de inicio /etc/init.d/screen-cleanupno se ejecuta, porque de forma predeterminada este servicio está enmascarado ( /lib/systemd/system/screen-cleanup.service -> /dev/null), por lo que systemd lo ignora.

En su lugar, systemd-tmpfiles-setup.servicecrea /run/screenen el arranque, como se configura en /usr/lib/tmpfiles.d/screen-cleanup.conf:d /run/screen 0775 root utmp

Jakob
fuente
Parece que (también) sugiere un procedimiento que el OP necesitaría realizar (manualmente) después de cada reinicio. ¿Puede ofrecer una solución permanente, que debería hacerse solo una vez? Por favor no responda en los comentarios; edite su respuesta para que sea más clara y completa.
Scott
@Scott systemctl enable systemd-tmpfiles-setup.serviceque @Jacob sugirió persistió durante los reinicios.
Tagar
0

Puedo solucionar este problema ejecutando los siguientes comandos.

sudo mkdir /var/run/screen
sudo chmod 777 /var/run/screen
Taichi Nakamura
fuente
Esta no es una buena solución. Cada vez que reinicie tiene que rehacer esto.
Arupgsh