Чтобы услышать звуковой сигнал из pc-динамика из сценария Python, вы можете использовать API evdev Linux:
#!/usr/bin/env python
import ctypes
import math
import os
import time
EV_SND = 0x12 # linux/input-event-codes.h
SND_TONE = 0x2 # ditto
time_t = suseconds_t = ctypes.c_long
class Timeval(ctypes.Structure):
_fields_ = [('tv_sec', time_t), # seconds
('tv_usec', suseconds_t)] # microseconds
class InputEvent(ctypes.Structure):
_fields_ = [('time', Timeval),
('type', ctypes.c_uint16),
('code', ctypes.c_uint16),
('value', ctypes.c_int32)]
frequency = 440 # Hz, A440 in ISO 16
device = "/dev/input/by-path/platform-pcspkr-event-spkr"
pcspkr_fd = os.open(device, os.O_WRONLY) # root! + modprobe pcspkr
fsec, sec = math.modf(time.time()) # current time
ev = InputEvent(time=Timeval(tv_sec=int(sec), tv_usec=int(fsec * 1000000)),
type=EV_SND,
code=SND_TONE,
value=frequency)
os.write(pcspkr_fd, ev) # start beep
try:
time.sleep(0.2) # 200 milliseconds
finally:
ev.value = 0 # stop
os.write(pcspkr_fd, ev)
Запустить Linux evdev API в качестве корня. /etc/rc.local запускается root, поэтому скрипт должен работать как есть.
Если файл /dev/input/by-path/platform-pcspkr-event-spkr не существует, убедитесь, что модуль pcspkr загружен:
root# modprobe pcspkr
]
У сценария нет других зависимостей, кроме самого python.