Чтобы услышать звуковой сигнал громкоговорителя ПК из /etc/rc.local скрипта Python через консоль Linux, вы можете использовать console_ioctl(4): KDMKTONE, KIOCSOUND:
#!/usr/bin/env python
import os
from fcntl import ioctl
CLOCK_TICK_RATE = 1193180 # magic https://github.com/johnath/beep/blob/0d790fa45777896749a885c3b93b2c1476d59f20/beep.c#L31-L49
KDMKTONE = 0x4B30 # generate tone include/uapi/linux/kd.h#L25
def beep(console_fd, frequency=440, length_millis=200):
period = CLOCK_TICK_RATE // frequency
ioctl(console_fd, KDMKTONE, (length_millis << 16) | period) # start beeping
# return immediately
beep(console_fd=os.open('/dev/tty0', os.O_RDONLY | os.O_NOCTTY)) # I'm [G]root
Убедитесь, что pcspkr модуль ядра не занесен в черный список (закомментируйте значение по умолчанию):
$ sudo sed -i 's/^blacklist pcspkr/#blacklist pcspkr/' /etc/modprobe.d/blacklist.conf
Убедитесь, что он может быть загружен без ошибок:
$ sudo modprobe pcspkr
Убедитесь, что /etc/rc.local исполняемый файл:
$ sudo chmod +x /etc/rc.local
print('\a') (запись символа U+0007 BELL* в stdout) приводит к , если у вас есть терминал .
Он может воспроизводить образец bell.ogg, загруженный с помощью команды pactl (для звукового сервера PulseAudio):
$ pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg
Вероятно, PulseAudio не использует динамик ПК
В моей системе Ubuntu 16.04, print('\a') из /etc/rc.local записывает #007 в /var/log/syslog и подает звуковой сигнал на громкоговоритель ПК (systemctl cat rc-local.service показывает [ f24], т. е. выход идет в файл журнала и консоль).