Kapitel 13. Spørgsmål og svar

Dette afsnit besvarer nogle spørgsmål som ofte stilles om aRts.

Generelle spørgsmål

13.1. Støtter KDE mit lydkort for lydafspilning?
13.2. Jeg kan ikke spille wav-filer med artsd!
13.3. Jeg hører lyd når jeg er logget på som root, men ingen andre brugere har lyd!
13.4. Dette hjælper for artsd, men hvad med for KMix, KMid, KsCD?
13.5. Hvad kan jeg gøre hvis artsd ikke starter eller bryder sammen når den kører?
13.6. Kan jeg flytte artsd (flytte kompilerede filer til en anden mappe)?
13.7. Kan jeg kompilere aRts med gcc-3.0?
13.8. Hvilke programmer kører med aRts?
13.1.

Støtter KDE mit lydkort for lydafspilning?

KDE bruger aRts til at afspille lyd, og aRts bruger driverne kernen for Linux®, enten OSS eller ALSA (med emulering af OSS). Hvis dit lydkort enten understøttes af ALSA eller OSS og er rigtigt indstillet (dvs. alle andre Linux®-programmer kan afspille lyd), kommer det til at virke. Der er dog nogle problemer med specifik hardware, læs afsnittet om hardwarespecifikke problemer hvis du har problemer med artsd på din maskine.

I mellemtiderne er støtte for diverse andre platforme også tilføjet. Her er en fuldstændig liste over hvordan den seneste version af aRts kan afspille lyd. Hvis du har en platform som ikke understøttes, så overvej gerne at overføre aRts til din platform.

aRts metode for lyd-I/OKommentar
paudStøtte for AIX personlige lydenhed (Personal Audio Device)
alsaLinux ALSA-0.5 og ALSA-0.9 drivere
libaudioioStøtte for det generelle LibAudioIO-bibliotek som virker på Solaris
nasNAS lydserver, nyttig for X-terminaler med NAS-støtte
nullLydenheden null, kasserer lyden uden at noget høres
ossOSS (Open Sound System) støtte (virker på Linux, forskellige BSD-versioner og andre platforme med OSS-drivere installerede)
tossTrådet OSS-støtte, som virker bedre i visse tilfælde når den almindelige OSS-støtte ikke virker godt
sgiStøtte for SGI Direct Media for IRIX
sunSolaris-støtte
13.2.

Jeg kan ikke spille wav-filer med artsd!

Tjek at artsd er linket til libaudiofile (ldd artsd). Hvis den ikke er det, så hent kdesupport, kompilér alt, og det vil virke.

13.3.

Jeg hører lyd når jeg er logget på som root, men ingen andre brugere har lyd!

Tilladelserne for filen /dev/dsp påvirker hvilke brugere der har lyd. For at lade alle bruge den, gør sådan her:

  1. Log ind som root.

  2. Åbn et Konqueror-vindue.

  3. Gå til mappen /dev.

  4. Klik på filen dsp med højre museknap, og vælg egenskaber.

  5. Klik på fanebladet Tilladelser.

  6. Markér Læs og Skriv i alle afsnit.

  7. Klik på O.k..

Du kan opnå samme virkning i et terminalvindue med kommandoen chmod 666 /dev/dsp.

For at begrænse adgangen af lyd til særlige brugere kan du bruge gruppetilladelser. For visse Linux®-distributioner, for eksempel Debian/Potato, ejes /dev/dsp allerede af en gruppe som hedder audio, så alt du behøver gøre er at tilføje brugerne til denne gruppe.

13.4.

Dette hjælper for artsd, men hvad med for KMix, KMid, KsCD?

Der er forskellige andre enheder som sørger for funktioner som der skal være adgang til for multimedieprogrammer. Du kan behandle dem på samme måde, enten ved at gøre dem tilgængelige for alle, eller bruge grupper for at kontrollere adgangen. Her er en liste, som måske stadigvæk er ufuldstændig (og hvis der er flere enheder på formen midi0, midi1..., så er 0-versionen kun med):

  • /dev/admmidi0

  • /dev/adsp0

  • /dev/amidi0

  • /dev/amixer0

  • /dev/audio

  • /dev/audio0

  • /dev/cdrom

  • /dev/dmfm0

  • /dev/dmmidi0

  • /dev/dsp

  • /dev/dsp0

  • /dev/midi0

  • /dev/midi0

  • /dev/midi00

  • /dev/midi00

  • /dev/mixer

  • /dev/mixer0

  • /dev/mpu401data

  • /dev/mpu401stat

  • /dev/music

  • /dev/rmidi0

  • /dev/rtc

  • /dev/sequencer

  • /dev/smpte0

  • /dev/sndstat

13.5.

Hvad kan jeg gøre hvis artsd ikke starter eller bryder sammen når den kører?

Forsøg først at bruge standardindstillingerne i KControl (eller hvis du starter manuelt, angive ingen ekstra flag bortset fra eventuelt -F10 -S4096 for latenstid). Særlig fuld dupleks virker formodentlig ikke med diverse drivere, så forsøg at deaktivere det.

En god måde at regne ud hvorfor artsd ikke starter (eller bryder sammen når den kørt) er at starte den manuelt. Åbn et Konsole-vindue og skriv:

% artsd -F10 -S4096
>

Du kan også tilføje flaget -l0, som udskriver mere information om hvad der sker, sådan her:

% artsd -l0 -F10 -S4096

Ved at gøre dette får du formodentlig nogen nyttig information om hvorfor den ikke startede. Eller hvis den bryder sammen mens noget særligt foregår, kan du gøre det og se “hvordan” den bryder sammen. Hvis du vil rapportere en fejl, kan et backtrace oprettet med gdb og/eller en strace hjælpe med til at finde problemet.

13.6.

Kan jeg flytte artsd (flytte kompilerede filer til en anden mappe)?

Du kan ikke flytte aRts helt perfekt. Problemet er at artswrapper har stedet for artsd indkompileret af sikkerhedsgrunde. Du kan imidlertid bruge .mcoprc-filen (TraderPath/ExtensionPath indgangene) til i det mindste at få en flyttet artsd til at finde sine komponenter. Se kapitlet om .mcoprc-filen for detaljer om hvordan man gør dette.

13.7.

Kan jeg kompilere aRts med gcc-3.0?

Et kort svar: nej, aRts virker ikke hvis du kompilerer den med gcc-3.0.

Langt svar: i den officielle udgave af gcc-3.0, er der to fejl som påvirker aRts. Det første problem med gcc-3.0, c++/2733, er ganske ufarligt (og har at gøre med problemer med asm-sætningen). Det gør at convert.cc ikke kan kompileres. Dette er rettet i gcc-3.0 CVS, og vil ikke være et problem med gcc-3.0.1 og senere. En måde at gå udenom problemet er også tilføjet i CVS-versionen af KDE/aRts.

Det andet problem med gcc-3.0, c++/3145 (som forårsager fejlagtig kodegenerering i visse tilfælde af multipel virtuel arv) er kritisk. Programmer som artsd bryder helt enkelt sammen når de startes hvis de er kompileret med gcc-3.0. Selvom visse fremskridt er gjort i gcc-3.0 grenen når dette skrives, bryder artsd stadigvæk vældigt ofte sammen, uforudsigeligt.

13.8.

Hvilke programmer kører med aRts?

Selvfølgelig så virker alle programmer som indgår i KDE med aRts. Dette omfatter:

  • Noatun

  • aRts-builder

  • aKtion

  • KMid

  • KMidi

  • KMix

  • KsCD

  • KDE-spil såsom KPoker og KTuberling

Visse KDE-programmer som endnu ikke indgår i KDE-udgaver (f.eks. i kdenonbeta) understøtter også aRts, inklusive:

  • Brahms

  • Kaboodle

  • Kdao

Følgende programmer som ikke hører til -KDE er kendte for at virke med aRts:

  • xmms (med aRts-plugin)

  • Real Networks RealPlayer 8.0 (virker med artsdsp; indbygget aRts-støtte overvejes)

Følgende programmer er kendte for ikke at virke med aRts:

  • ingen

Se også svarene på spørgsmålene i afsnittet om programmer som ikke understøtter aRts.

Dette afsnit er ufuldstændigt. Hvis du har mere information om programmer som understøttes eller ej, så vær venlig at sende dem til forfatteren så at de kan tilføjes her.

Programmer som ikke understøtter aRts

13.1. Så snart KDE kører, så kan ingen andre programmer få adgang til mit lydkort!
13.2. Du sagde at den går i autosuspension efter 60 sekunder, det gør den ikke for mig!
13.3. Hvordan kan jeg køre gamle programmer som ikke understøtter aRts?
13.4. Jeg kan ikke køre artsdsp med noget program. Den bryder altid sammen!
13.5. Er der teoretiske begrænsninger med visse programmer som forhindrer at de nogensinde kan virke med artsdsp?
13.6. Hvad kan jeg gøre hvis et program ikke virker med artsdsp?
13.7. Hvad gælder for programmer skrevet for KDE 1.x?
13.8. Hvad gælder for programmer som bruger Enlightened Sound Daemon, ESD?
13.1.

Så snart KDE kører, så kan ingen andre programmer få adgang til mit lydkort!

Når aRts-lydserveren som bruges af KDE kører, bruger den lydenheden. Hvis serveren er i tomgang i 60 sekunder, går den i autosuspension og slipper enheden automatisk.

13.2.

Du sagde at den går i autosuspension efter 60 sekunder, det gør den ikke for mig!

Hvis du starter artsd fra KDE's kontrolcenter, er det standardværdien at gå i autosuspension efter 60 sekunder. Hvis du starter artsd fra kommandolinjen skal du bruge flaget -s for at angive ventetilstandsværdien, ellers er det standardopførsel at lukke af for autosuspensionsfunktionen.

For øjeblikket går serveren ikke i autosuspension hvis fuld dupleks bruges. Luk af for fuld dupleks i kontrolcentret så går den i autosuspension. At lukke af for fuld dupleks er i almindelighed en god idé alligevel, hvis du kun bruger aRts til at afspille lyd og ikke til at indspille.

13.3.

Hvordan kan jeg køre gamle programmer som ikke understøtter aRts?

Kør dem med artsdsp. Hvis du for eksempel normalt ville køre:

% mpg123 foo.mp3

så brug i stedet:

% artsdsp mpg123 foo.mp3

Dette sender lyduddata til aRts. Denne metode kræver ikke nogen ændringer i programmet. Det er noget af et grimt fiks, og understøtter endnu ikke alle funktioner i lydkortsenheden, så visse programmer virker måske ikke.

13.4.

Jeg kan ikke køre artsdsp med noget program. Den bryder altid sammen!

Du behøver en ny udgave af glibc-bilblioteket. artsdsp virker ikke tilforladeligt på visse ældre Linux®-distributioner. For eksempel på Debian 2.1 (som er baseret på glibc 2.0) virker den ikke, mens den gør det på Debian 2.2 (som er baseret på glibc 2.1.3).

13.5.

Er der teoretiske begrænsninger med visse programmer som forhindrer at de nogensinde kan virke med artsdsp?

Nej. Brugen artsdsp kan resultere i noget højere latenstider og CPU-brug end at bruge aRts programmeringsgrænseflade direkte. Udover det, skal alle program som ikke virker anses som en fejl i artsdsp. Teknikken som bruges af artsdsp skal, hvis den er rigtigt implementeret, tillade hvert program at virke med den (inklusive store programmer såsom Quake 3).

13.6.

Hvad kan jeg gøre hvis et program ikke virker med artsdsp?

Du kan vente på at artsd går i autosuspension eller bruge kommandoen artsshell suspend for at bede at servere om at gå i autosuspension. Du kommer kun til at kunne få serveren til at gå i autosuspension hvis intet aRts-program bruger den for øjeblikket, og ingen aRts-programmer kan køre mens serveren er i autosuspension.

Hvis serveren er optaget ser en grov men effektivt måde at slippe af med den sådan her ud:

% killall artsd ; killall artswrapper
Start nu dit eget program.
% kcminit arts

Alle aRts-programmer som kører lige nu kan bryde sammen, når du afslutter serveren.

13.7.

Hvad gælder for programmer skrevet for KDE 1.x?

Hvis du kører KDE 1.x programmer, som afspiller lyd via lydserveren i KDE 1, skal du køre kaudioserver for at det skal virke. Du kan starte kaudioserver på samme måde som andre programmer som ikke understøtter aRts:

% artsdsp kaudioserver

Du skal have installeret kaudioserver (fra samme kilde hvor du skaffede KDE 1.x programmerne). Den hører til KDE 1.x, ikke KDE 2.

13.8.

Hvad gælder for programmer som bruger Enlightened Sound Daemon, ESD?

Dette problem ligner tilfældet med kaudioserver. Sådanne programmer kræver en esd-server som kører. Du kan starte esd via artsdsp, og alle programmer som understøtter ESD vil så virke godt, sådan her:

% artsdsp esd

Nyere versioner af aRts ( >= 1.2.0) kan også bruge Enlightened Sound Daemon i stedet for direkte adgang til lydkortet. På kommandolinjen kan du bruge flaget -a, på følgende måde

% artsd -a esd

til at få understøttelse af ESD. I stedet for, i KDE, kan du bruge kontrolcentret til at indstille artsd til at bruge ESD, via Lyd -> Lydserver -> Lyd I/O.

Latenstid

13.1. Ind imellem hører jeg korte pauser når jeg lytter til musik. Er dette en fejl?
13.2. Hvad er effekten af svarstidsindstillingen?
13.3. Er der noget andet jeg kan gøre for at undgå pauser?
13.4. Realtidsprioritet synes ikke at have nogen virkning for mig?
13.5. Hvorfor tager artsd så meget CPU-tid?
13.1.

Ind imellem hører jeg korte pauser når jeg lytter til musik. Er dette en fejl?

Dette er formodentlig ikke en fejl, men forårsages af det faktum at Linux® kernen ikke er særlig god til realtidsskemalægning. Der er situationer hvor aRts ikke kan følge med i afspilningen. Du kan dog aktivere realtidsrettigheder (via kontrolcentret), og bruge en stor latenstidsindstilling (såsom 250 ms eller så stor som muligt), hvilket bør forbedre situationen.

13.2.

Hvad er effekten af svarstidsindstillingen?

Hjælpeteksten for denne indstilling i kontrolcentret kan være forvirrende. En lavere værdi betyder at aRts reagerer hurtigere på ydre begivenheder (dvs. tiden det tager mellem et vindue lukkes og lyden afspilles af artsd). Den kommer også til at bruge flere CPU-ressourcer og det vil være mere sandsynligt med pauser i lyden.

13.3.

Er der noget andet jeg kan gøre for at undgå pauser?

For brugere af IDE-enheder, kan man bruge kommandoen hdparm til at indstille din IDE-enhed til at bruge DMA-tilstand. Et advarselsord: Dette virker ikke med alle slags hardware, og kan forårsage at man skal lave en hardware-nulstilling, eller i sjældne tilfælde, tab af data. Læs dokumentationen for kommandoen hdparm for flere detaljer. Jeg har brugt følgende kommando med heldigt resultat:

% hdparm -c1 -d1 -k1 -K1 /dev/hda

Du skal køre dette efter hver boot, så måske vil du tilføje det i et opstartsscript for systemet (hvordan man gør dette er specifikt for hver distribution, på Debian Linux® tilføjes det oftest i /etc/rc.boot).

13.4.

Realtidsprioritet synes ikke at have nogen virkning for mig?

Kontrollér at artswrapper virkelig er installeret suid root, som det er meningen at den skal være. Mange distributioner (for eksempel SuSE7.x) gør ikke dette. Du kan kontrollere det med: ls -l $(which artswrapper). Godt:

% ls -l $(which artswrapper)
-rwsr-xr-x    1 root     root         4556 Sep 24 18:05 /opt/kde2/bin/artswrapper
Dårligt:
% ls -l $(which artswrapper)
-rwxr-xr-x    1 root     root         4556 Sep 24 18:05 /opt/kde2/bin/artswrapper
Hvis du ikke har s'et med, kan du få det med:
% chown root $(which artswrapper)
% chmod 4755 $(which artswrapper)

Hvis du gør artswrapper SUID root, kommer det formodentlig til at forbedre kvaliteten på lydafgivelsen ved at reducere ophold i musikken. Dog øger det også risikoen for at en fejl i koden, eller en bruger med lyst til at skade kan få maskinen til at bryde sammen eller skade på anden måde. Desuden, at prioritere høj lydkvalitet på flerbrugermaskiner kan forårsage forværret ydelse for brugere som forsøger at bruge maskinen på en “produktiv” måde.

13.5.

Hvorfor tager artsd så meget CPU-tid?

Kontrollér dine svarstidsindstillinger. Desuden er den nuværende version ikke egentlig optimeret. Dette vil blive bedre, og indtil da kan det ikke rigtigt forudsiges hvor hurtig artsd kan eller ikke kan være.

Netværkstransparens

13.1. Hvad skal jeg gøre for at få netværkstransparens?
13.2. Hvordan fejlretter jeg netværkstransparens hvis det ikke virker?
13.1.

Hvad skal jeg gøre for at få netværkstransparens?

Aktivér det i kontrolcentrets indstillinger for Lydserver (Aktivér sikkerheds- og referenceinformation for X11-serveren og Aktivér netværkstransparens). Kopiér derefter din .mcoprc-fil til alle maskiner som du vil bruge netværkstransparensen fra. Log på igen. Sørg for at værtsmaskinerne som skal samarbejde kender hinandens navne (dvs. de har navne som kan opløses eller findes i /etc/hosts).

Dette skulle være alt du behøver at gøre. Hvis det ikke virker alligevel, følger nogen yderligere detaljer. aRts lydserverprocessen artsd skal kun køres på en værtsmaskine, den med lydkortet hvor lyden skal afspilles. Den kan startes automatisk ved indlogning til KDE (hvis du angiver det i kontrolcentret), eller manuelt med noget i retning af:

% artsd -n -F 5 -S 8192

Flaget -n angiver netværkstransparens, mens de øvrige indstiller latenstider.

Din .mcoprc-fil skal indeholde denne linje:

GlobalComm=Arts::X11GlobalComm

for alle maskiner som er involverede, for at netværkstransparens skal virke. Det er dette som aktiveres af indstillingen Aktivér sikkerheds- og referenceinformation over X11-serveren i kontrolcentret.

Til sidst, i alle KDE-versioner i 2.0.x serien, er der en fejl som viser sig hvis du ikke har et domænenavn indstillet. Klienter for artsd forsøger at finde en forbindelse via kombinationen af værtsmaskinenavn.domænenavn. Hvis domænenavnet er tomt, forsøger de at forbinde til værtsmaskinenavn. (læg mærke til det ekstra punktum). At tilføje en post som ser sådan her ud i /etc/hosts (dvs. orion. hvis værtsmaskinenavnet er orion) gør at man undgår problemet.

13.2.

Hvordan fejlretter jeg netværkstransparens hvis det ikke virker?

Hvis du har KDE's kildekode, gå til kdelibs/arts/examples, og kør make check for at kompilere nogle programmer, inklusive referenceinfo. Kør derefter

% ./referenceinfo global:Arts_SimpleSoundServer

Udskriften angiver værtsmaskinenavnet og porten som bruges af aRts. For eksempel, tcp:orion:1698 ville betyde at alle klienter som forsøger at bruge netværkstransparens skal vide hvordan værtsmaskinen orion kan nås.

Hardware-specifikke spørgsmål

13.1. Hvilken hardware virker artsd ikke godt sammen med?
13.2. Hvorfor er der hardware-specifikke problemer, og hvordan ser jeg dem?
13.3. Hvad er forkert i driveren hvis jeg får problemet med for stor CPU-belastning?
13.4. Hvad er forkert i driveren hvis jag får denne fejlmeddelelse?
13.1.

Hvilken hardware virker artsd ikke godt sammen med?

Det virker som om der er nogle få Linux-drivere som ikke virker godt sammen med aRts for visse udgaver af kernen. Læs først denne liste inden du rapporterer en fejl. Hvis du finder at informationen i listen ikke er fuldstændig, så tøv venligst ikke med at fortælle os om det.

Linux-driver/lydkortVirker ikke medVirker medBemærkninger
i810-driver (Intel 810 + AC97 Audio)2.4.92.4.18, 2.2.20, kommerciel OSS-driver, alsa-0.5.12a med OSS-emuleringdriver forårsager for stor CPU-belastning (se nedenfor)
maestro 3/4-kredse2.4.9?driver forårsager ind imellem overbelastning af processoren (se nedenfor)
aureal8820, aureal8830-drivere fra sourceforge2.4.17?driver forårsager fejlmeddelelse / for meget CPU-belastning (se nedenfor)
OSS kommerciel 3.9.4g med Aureal Vortex??systemet låses
ymfpci2.4.0, 2.4.122.4.17driver forårsager fejlmeddelelse (se nedenfor)

13.2.

Hvorfor er der hardware-specifikke problemer, og hvordan ser jeg dem?

De almindelige problemer er at driveren ikke giver aRts tilstrækkelig eller tilstrækkeligt nøjagtig information om hvornår lyddata skal skrives. De fleste OSS-drivere giver rigtig information, men ikke alle.

Du vil måske bemærke at visse andre programmer (såsom xmms) ikke behøver denne information, og derfor virker rigtigt til og med for din hardware. Men aRts behøver denne information, så artsd vil måske ikke virke. Dette er stadigvæk en fejl i driveren, og ikke i aRts.

Der er to slags opførsel som artsd påviser når den køres med en fejlagtig driver. Enten forsøger den at sende ny data, men det lykkes egentlig aldrig, hvilket til slut fører til en for stor CPU-belastning, dette rapporteres, og at den afsluttes. Det andet problem er at artsd kan få forkert information om hvor meget data der skal skrives. Så stopper artsd med et fejlmeddelelse som:

artsd: audiosubsys.cc:458: void Arts::AudioSubSystem::handleIO(int):
Assertion `len == can_write' failed.
Aborted

13.3.

Hvad er forkert i driveren hvis jeg får problemet med for stor CPU-belastning?

Oftest bruger artsd kaldet select() for at holde styr på hvornår ny data skal skrives. Derefter bruger den kaldet ioctl(...GETOSPACE...), for at holde styr hvor meget data som skal skrives. Til sidst skriver den data.

Et problem opstår hvis artsd enten altid vækkes, eller hvis der er meget lidt data at skrive. OSS-dokumentationen angiver at kaldet select() kun vækker en proces hvis der er mindst et fragment at skrive. Hvis artsd vækkes når der ikke er nogen, eller meget lidt, data at skrive, for eksempel en sampling, forsøger den at skrive små stumper med lyddata, hvilket kan blive meget kostbart, og til slut give for stor CPU-belastning.

For at rette dette, skal driveren kun vække artsd hvis et helt fragment kan skrives.

13.4.

Hvad er forkert i driveren hvis jag får denne fejlmeddelelse?

Oftest bruger artsd kaldet select() for at holde styr på hvornår ny data skal skrives. Derefter bruger den kaldet ioctl(...GETOSPACE...), for at holde styr hvor meget data som skal skrives. Til sidst skriver den data.

Hvis artsd ikke kan skrive så meget data som angives af kaldet ioctl, så stopper den med fejlmeddelelsen ovenfor. For at rette dette, skal driveren angive den rigtige størrelse på det ledige plads.

Andre problemer

13.1. Jeg kan ikke bruge aRts-builder. Den bryder sammen når jeg kører et modul!
13.1.

Jeg kan ikke bruge aRts-builder. Den bryder sammen når jeg kører et modul!

Den mest sandsynlige grund er at du bruger gamle strukturer eller moduler som ikke understøttes i KDE 2 versionen. Desværre er dokumentationen på nettet for aRts-0.3.4.1 som er helt forældet. Det oftest rapporterede sammenbrud er at hvis en struktur køres i aRts-builder så fås fejlmeddelelsen [artsd] Synth_PLAY: lydsystemet bruges allerede.

Du skal bruge et Synth_AMAN_PLAY modul i stedet for Synth_PLAY så forsvinder problemet. Se også aRts-builder's hjælpefil (tryk på F1 i aRts-builder).

Nyere udgaver af aRts-builder (KDE 2.1 beta 1 og senere) levereres med et antal eksempler som du kan bruge.