Нет такой вещи, как «процесс init.d».
rc.local является частью системы rc, которая был заменен три раза. Эта система была заменена van Smoorenburg rc, upstart (десять лет назад) и (по версии Ubuntu версии 15) systemd. То, что вы используете, - это совместимость с обратной совместимостью с третьей итерацией.
В системных операционных системах, таких как Ubuntu версии 15 и более поздних версиях, прокладка является службой systemd с именем rc-local.service. Вы можете узнать его определение службы с помощью systemctl cat rc-local.service
Как вы можете видеть, это не определено как присоединение услуги к терминальному устройству. Сервисный процесс не запускается с управляющим терминалом, а его стандартный ввод и вывод не подключены к терминалу.
Этот код на питоне и сценарий оболочки не «подают звуковой сигнал о динамике ПК». Они записывают символ # 7 на свои стандартные выходы. Просто так происходит, когда вы запускаете их в интерактивном режиме в своем сеансе входа в систему, когда устройство, которое является их стандартным выходом, интерпретирует символ # 7 как инструкцию, чтобы сделать шум. Перенесите стандартный вывод интерактивной команды на /dev/null и наблюдайте за тем, как тихий код становится.
Именно поэтому важно, что прокладка rc.local (очень) обратной совместимости не имеет никакого подключения к терминальному устройству .
Вы можете решить эту проблему с помощью утилиты beep. Эта попытка (если она вызвана соответствующим образом) для явного открытия дескриптора файла к терминальному устройству и отправки символа № 7 (или использования консоли или evdev ioctl() s) этого устройства, а не просто предполагая, что стандартный вывод является терминальным устройством.
Но стоит подумать о том, чтобы не использовать rc.local тоже.