HOME не устанавливается при запуске bash из rc.local

Дистры, использующие systemd, используют hostnamectl для установки имени хоста:

$ sudo hostnamectl set-hostname exchange.mydomain.com

Вам придется выйти из системы и снова войти, чтобы увидеть изменения в подсказке оболочки, но команда hostname покажет изменения сразу после выполнения команды.

Использование

$ sudo hostnamectl --help
hostnamectl [OPTIONS...] COMMAND ...

Query or change system hostname.

  -h --help              Show this help
     --version           Show package version
     --no-ask-password   Do not prompt for password
  -H --host=[USER@]HOST  Operate on remote host
  -M --machine=CONTAINER Operate on local container
     --transient         Only set transient hostname
     --static            Only set static hostname
     --pretty            Only set pretty hostname

Commands:
  status                 Show current hostname settings
  set-hostname NAME      Set system hostname
  set-icon-name NAME     Set icon name for host
  set-chassis NAME       Set chassis type for host
  set-deployment NAME    Set deployment environment for host
  set-location NAME      Set location for host
0
27.05.2019, 16:51
2 ответа

Все перечисленное в rc.localуправляется root.

По какой-то причине кажется, что переменная HOMEне установлена ​​при запуске rc.local(, что привело бы к /root/, и я полагаю, что вы хотите, чтобы ваши обычные пользователи находились дома под/home/user/).

Чтобы это исправить, замените $HOMEв вашем скрипте на полный путь, т.е. /home/user/.

0
28.01.2020, 02:40

Проблема не в том, чтобы найти сценарий, проблема в том, что вы полагаетесь на $HOMEналичие значения в среде, которая, возможно, не определила эту переменную (среда rc.localработает в ). $HOMEобычно имеет значение только после входа в систему (и в некоторых других задокументированных местах, например, в заданиях cron ).

Вы полагаетесь на то, что $HOMEимеет значение либо потому, что вы используете его неявно вcd(без аргумента ), либо в расширении с тильдой.

Один из способов исправить это — явно установить $HOMEв скрипте:

HOME=${HOME:-/home/pi}
export HOME

Это установит $HOMEна /home/pi, если только оно уже не установлено и не -пусто.

Обратите внимание, что команды, запускаемые из rc.local, выполняются от имени пользователя root. Чтобы запустить скрипт от имени конкретного пользователя, используйте

su username -c bash /home/pi/Desktop/mount_and_run.bash &

в rc.local.

Вы можете даже захотеть использовать su -l username -c bash..., который будет имитировать полный вход в систему, что, в свою очередь, установит $HOMEв соответствующее значение для данного пользователя.

2
28.01.2020, 02:40

Теги

Похожие вопросы