Dlaczego Linux nie pozwala mi grać z / dev / dsp?

12

Pracuję nad podręcznikiem systemu Linux, który mówi mi o urządzeniach. Mówi, że jeśli wyślę odpowiednie wyjście /dev/dsp, to odtworzy dźwięk. Przykład jest taki cat file.wav > /dev/dsp, gdzie file.wav to po prostu dowolny plik .wav.

Kiedy to robię, otrzymuję odmowę zgody. Jeśli uruchomię to z sudo, nadal otrzymam pozwolenie. Jeśli supierwszy raz, dźwięk nie będzie odtwarzany.

Dlaczego otrzymuję odmowę zgody sudo? Dlaczego nawet dźwięk nie gra su?

Korgan Rivera
źródło
1
Upewnij się, że użytkownik jest w audiogrupie.
Carl Groner,
Może być również konieczne upewnienie się, że plik wav jest nieprzetworzonym dźwiękiem - nie wszystkie pliki wav są surowe.
Drake Clarris,
@DrakeClarris, który spowodowałby, że szum byłby wyprowadzany, a nie błąd odmowy dostępu.
cjm
@cjm Myślałem więcej o ciszy, grając przy użyciu su
Drake Clarris

Odpowiedzi:

14

/dev/dspjest częścią OSS, która od dawna nie była częścią jądra Linuksa. Od dawna został zastąpiony przez ALSA, który korzysta z różnych urządzeń, różnych programów i innego API.

Istnieje jednak moduł warstwy emulacji. Jeśli jest dostępny, załadowanie snd-pcm-ossmodułu umożliwi korzystanie z urządzeń PCM dla OSS, takich jak /dev/dsp.

Lub po prostu trzymaj się przesyłania danych do aplaylub paplayzamiast tego.

Ignacio Vazquez-Abrams
źródło
2
sudo modprobe snd-pcm-ossdziała na moim Ubuntu, aby załadować ten moduł. I dostać /dev/dsp1a /dev/dsp2nie z tego.
Veda
9

Jeśli uruchomię to z sudo, nadal otrzymam pozwolenie.

Zgodnie z tym stwierdzeniem brzmi to tak, jakbyś próbował wykonać polecenie takie jak:

sudo cat file.wav > /dev/dsp

Powodem, dla którego nadal pojawia się „odmowa uprawnień”, jest to, że powłoka najpierw próbuje otworzyć /dev/dspurządzenie dla danych wyjściowych, zanim uruchomi polecenie (które jest sudo). Aby powłoka otworzyła przekierowanie z uprawnieniami roota, musisz zrobić coś takiego:

sudo sh -c 'cat file.wav > /dev/dsp'
Greg Hewgill
źródło
6

Nieaktualna książka, jak wspomniano.
Tak więc, aby przykłady działały z bardziej nowoczesnym linuksem, gdzie mówi coś takiego

cat music.wav > /dev/dsp

zmień na:

cat music.wav | aplay

Właśnie zrobiłeś swoje pierwsze portowanie kodu! Zdobyć! Nie krępuj się wysłać łatki autora książki. :-)

Hal
źródło