Por que o rc.local não roda inteiramente?

4

Aqui está o meu rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/bin/echo 12 > /sys/class/backlight/acpi_video0/brightness
/bin/echo disable > /proc/acpi/ibm/bluetooth

# Samsung at home
/usr/bin/xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync
/usr/bin/xrandr --addmode VGA1 1680x1050_60.00
/usr/bin/xrandr --output VGA1 --mode 1680x1050_60.00

exit 0

cuja permissão é -rwxr-xr-x .

O primeiro comando funciona, eu posso definir o brilho do monitor do meu laptop. O script a seguir é desabilitar o bluetooth e definir a resolução do meu monitor externo.

Apenas o primeiro comando é executado corretamente, não os outros.

Eu sei que o rc.local para de funcionar quando um comando falha. No entanto, eu tentei executá-lo manualmente

/bin/sh /etc/rc.local

Tudo parece funcionar corretamente, o bluetooth é desativado e a resolução é definida sem problemas. Eu também tentei executar o primeiro comando no terminal

/bin/echo 12 > /sys/class/backlight/acpi_video0/brightness
echo $?

Isso mostra que o primeiro comando retorna zero.

Portanto, não entendo porque o sistema não executa todos os comandos em rc.local. Eu realmente preciso disso, especialmente para as duas primeiras linhas que precisam de permissão de root.

    
por user6417 09.02.2014 / 18:53

3 respostas

4

/etc/rc.local é executado antes que o servidor X seja iniciado, por isso não tem acesso a nenhum recurso de GUI. Os comandos xrandr não podem ter nenhum efeito.

Coloque os comandos xrandr em um arquivo diferente, que é executado quando sua sessão da GUI é iniciada. O arquivo depende do seu ambiente de trabalho.

    
por 10.02.2014 / 02:13
1

Problema resolvido

Como @Gilles disse, eu deveria colocar os comandos xrandr em um outro arquivo, pois rc.local é executado antes de X. Então eu coloquei todos os comandos xrandr em outro arquivo de script, e o adicionei à lista de inicialização automática de meu ambiente xfce, agora a configuração da resolução funciona.

No entanto, para o Bluetooth, aparentemente, é um problema de tempo, descobri que o Bluetooth está desativado por alguns milissegundos e depois ligou novamente. Parece que algo reativou o Bluetooth depois de executar rc.local .

Então, adicionei sleep 5 no início de rc.local , agora problema resolvido.

    
por 10.02.2014 / 05:03
0

Em vez de perder 5 segundos para dormir, por que não colocar o Bluetooth desativado em seu script xrandr que é executado automaticamente?

    
por 01.07.2014 / 03:02