Beep_() für Linux?

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Beep_() für Linux?

Beitrag von pickelrobert »

Hallo.

Gibt es unter Linux soetwas wie Beep_(Frequenz,Dauer)? Einen "allgemeinen" Beep habe ich schon gefunden, allerdings kann ich dort keine Parameter definieren.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Beep_() für Linux?

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Re: Beep_() für Linux?

Beitrag von pickelrobert »

Gibt aber keine Antwort auf meine Frage. Aber ich formuliere es anders:

Welche Linux(API)Funktion muß ich benutzen, um Töne mit variabler Frequenz und Dauer auf dem Systemlautsprecher auszugeben. Die Funktion unter Windows ist Beep_(Frequenz,Dauer)
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Beep_() für Linux?

Beitrag von Andreas21 »

vieleicht findest du was hier:
Linux Api (HTML) & Linux Kernel API (PDF)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Re: Beep_() für Linux?

Beitrag von pickelrobert »

Leider habe ich noch nichts passendes gefunden.

Kann man das irgendwie nachbilden?
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Re: Beep_() für Linux?

Beitrag von Marvin »

Na ja, du kannst eine Wave-Datei on-the-fly im Speicher erstellen, per CatchSound laden und dann abspielen.

Sooo schwer sollte das nicht sein.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Beep_() für Linux?

Beitrag von Andreas21 »

Vieleicht hilft dir das:

http://www.netzmafia.de/skripten/hardwa ... sound.html

ich habe es noch nicht zum lauffen bekommen.

Code: Alles auswählen

#O_RDONLY = 0
#KDMKTONE = $4B30

Procedure Beep(freq.l,duration.l)
  Protected fd.i, res.l
  fd = open_("/dev/console",#O_RDONLY,0);
  If (freq > 0)
    res = (duration << 16) + (1193180/freq);
    ioctl_(fd,#KDMKTONE,res);
  EndIf
  ;usleep_(duration*1000)
  Delay(duration)
  close_(fd);
EndProcedure

Beep(880,100)
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Re: Beep_() für Linux?

Beitrag von pickelrobert »

Habe Dein Beispiel mit den Suchbegriffen "beep() linux" als C-Quelle gefunden. Funktioniert leider nur als "root". Ich denke, das wird auch das Problem bei dem PB-Beispiel sein. Werde es nachher testen.
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Re: Beep_() für Linux?

Beitrag von pickelrobert »

Vermutung hat sich bestätigt.

Mal sehen, vielleicht gibt es noch eine Lösung, ohne "root" sein zu müssen...
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Beep_() für Linux?

Beitrag von Shardik »

pickelrobert hat geschrieben:Mal sehen, vielleicht gibt es noch eine Lösung, ohne "root" sein zu müssen...
Ich fürchte, eine Lösung ohne root-Rechte wird es leider nicht geben...

Ich habe den Beispiel-Code von Andreas21 gestern ebenfalls ausprobiert und festgestellt,
daß sowohl der Zugriff auf /dev/console als auch der Einsatz von ioctl_() root-Rechte
benötigt. Für /dev/console kann man mit chmod die Rechte leicht anpassen, aber ioctl_()
ist eine Art Poke-Befehl, der nur mit root-Rechten ausgeführt werden kann. Als Abhilfe
bleibt nur, eine ausführbare Beep-Datei zu kompilieren, diese dem Benutzer root zuzuordnen
und bei dieser Datei dann mit chmod das suid-Bit (set user id, auch "Sticky bit" genannt) zu
setzen, das bewirkt, daß die Beep-Datei mit root-Rechten ausgeführt wird (egal von wem sie
aufgerufen wird) und ioctl_() problemlos ausgeführt werden kann.

Man könnte zu diesem Zweck auch das C-Programm Beep() von Jonathan Nightingale
herunterladen und kompilieren, das noch weitere interessante Optionen bietet. In seiner
Readme-Datei beschreibt Jonathan auch die Problematik von ioctl() und die möglichen
Abhilfen:
http://www.linux.org/apps/AppId_2367.html
Antworten