Über die digitale Audioausgabe unter Linux wurde ja bereits einiges in diesem Forum geschrieben. Ich habe versucht mich diesem Thema mit Linux-Borbmitteln zu nähern und letztlich einen Audiopc aufzubauen, den ich mittels graphischer Front-Ends auch über Tablet-PCs oder Touch-Phones steuern kann.
Selbstverständlich stand auch bei mir die möglichst bitgenaue Wiedergabe der gespeicherten Audiodaten im Vordergrund.
Hinzu kommt, dass ich auch auf die Einbindung von Firewire Audio Interfaces eingegangen bin, was evtl. tatsächlich für den Ein- oder Anderen eine Hilfestellung sein könnte, da diesbezüglich hier noch nicht viel geschrieben wurde.
Da ich auch Platten digitalisiere gibt es auch einen Abschnitt über die Aufnahme analoger Audiodaten und deren digitaler Speicherung.
Über Anregungen und Verbesserungsvorschläge freue ich mich jederzeit. Falls jemand sich an dem von mir beschriebenen Setup orientieren möchte, stehe ich gerne jederzeit mit Rat und Tat zur Verfügung.
Keywords
Linux, Audio, Realtime, Bitperfect, low latency
Resources
http://ccrma.stanford.edu/planetccrma/software
http://music.tutsplus.com/articles/work ... udio-20601
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
https://spins.fedoraproject.org/lxde/
http://wiki.linuxmusicians.com/doku.php
http://wiki.linuxaudio.org/wiki/system_configuration
http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
https://access.redhat.com/documentation ... rnors.html
http://lwn.net/Articles/143397
http://docs.fedoraproject.org/en-US/Fed ... erVNC.html
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
Hardware
Computer
Jeder beliebige Computer mit einer geeignetten Schnittstelle für eine anständige Soundkarte der mit einem Linuxbetriebssystem lauffähig ist (ich kenne mich nur mit Linux aus).
getestete Soundkarten
EDIROL FA-66
Gustard U12 mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/2,0
Musical Fidelity V-Link 192kHz mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/2,0
und externem Netzteil Squeeze-Upgrade BOTW Linearnetzteil 5V USB-B
Musical Fidelity V90-DAC 24/96 mit USB-Kabel VS-04-2X2X26C7/7-SDA/SDB/3,0
M Audio Audiophile 24/96
DAC
Naim DAC / Naim 555 PS DR
Vorverstärker
Naim NAC 552 / Naim SuperCap DR
Endstufe
Naim NAP 500
Lautsprecher
Naim DBL
Betriebssystem-Installation
- Installation von Fedora 21 Workstation x86_64
Als Unterlage für unser Audio-Linux System soll Fedora in der aktuellen Version, aber mit möglichst wenig Schnickschnack herhalten.
Fedora bietet sog. Spins an, die vorkonfiguriert die Distribution für unterschiedliche Anwendergruppen bereitstellen. Ich habe mich für den schlanken LXDE Desktop Spin entschieden, siehe:
https://spins.fedoraproject.org/lxde/
Vorgehensweise
→ durchgeführte Maßnahmen bei der Betriebssysteminstallation:
> - booten von Live-Medium
> - sobald Arbeitsoberfläche betriebsbereit: Install to Hard Drive
> - Installationssprache: Deutsch
> - Datum und Uhrzeit: Europa/Berlin
> - Tastatur: Deutsch
> - Installationsziel:
> - ich werde die Partitionierung konfigurieren
> - Partitionierungsschema: Standard-Partition
> + Einhängepunkt: / , Kapazität: 32 GB, Dateisystem: ext4, Label: root
> + Einhängepunkt: swap , Kapazität: 16 GB, Dateisystem: swap, Label: swap
> + Einhängepunkt: local , Kapazität: Rest, Dateisystem: ext4, Label: swap
> Netzwerk & Hostname: pc-wohnzimmer
> Root-Password: ***
← durchgeführte Maßnahmen bei der Betriebssysteminstallation:
booten, dann als root:
→ Benutzer anlegen nach erfolgreicher Intallation un dem ersten Booten:
mkdir /local/home
echo "scc:x:750:" >> /etc/group
useradd -d /local/home/hu -u 7513 -g 750 hu
passwd hu
← Benutzer anlegen nach erfolgreicher Intallation un dem ersten Booten:
Nachinstallation bei Verwendung von Firewire Audio Devices
nur wenn das Sounddevice ein Firewire Device ist:
yum install ffado libffado
yum install jack-audio-connection-kit qjackctl
Hardwarecheck
Hardwarecheck bei Firewire Devices
Karte 1
lspci | grep -i firewire
> 08:03.4 FireWire (IEEE 1394): O2 Micro, Inc. Firewire (IEEE 1394) (rev 02)
ffado-test ListDevices
> -----------------------------------------------
> FFADO test and diagnostic utility
> Part of the FFADO project -- www.ffado.org
> Version: 2.2.1-Unversioned directory
> (C) 2008, Daniel Wagner, Pieter Palmers
> This program comes with ABSOLUTELY NO WARRANTY.
> -----------------------------------------------
>
> === 1394 PORT 0 ===
> Node id GUID VendorId ModelId Vendor - Model
> 0 0x00000e1003b3b456 0x0000000E 0x00000000 Linux Firewire -
> 1 0x0040ab0000c33b85 0x000040AB 0x00010049 EDIROL - EDIROL FA-66
Karte 2
lspci | grep -i firewire
> 01:07.0 FireWire (IEEE 1394): NEC Corporation uPD72874 [Firewarden]
> IEEE1394a OHCI 1.1 Link/3-port PHY Controller (rev 01)
ffado-test ListDevices
> -----------------------------------------------
> FFADO test and diagnostic utility
> Part of the FFADO project -- www.ffado.org
> Version: 2.2.1-Unversioned directory
> (C) 2008, Daniel Wagner, Pieter Palmers
> This program comes with ABSOLUTELY NO WARRANTY.
> -----------------------------------------------
>
> === 1394 PORT 0 ===
> Node id GUID VendorId ModelId Vendor - Model
> 0 0x0040ab0000c33b85 0x000040AB 0x00010049 EDIROL - EDIROL FA-66
Hardwarecheck bei allen anderen Audio Devices
more /proc/asound/cards
> 0 [x20 ]: USB-Audio - xCORE USB Audio 2.0
> XMOS xCORE USB Audio 2.0 at usb-0000:00:1d.7-2, high speed
> 1 [M192kHz ]: USB-Audio - Musical Fidelity V-Link 192kHz
> Musical Fidelity Musical Fidelity V-Link 192kHz
> at usb-0000:00:1d.7-2, high spead
> 2 [Intel ]: HDA-Intel - HDA Intel
> HDA Intel at 0xfe220000 irq 50
> 3 [M2496 ]: USB-Audio - M Audio Audiophile 24/96
> M Audio Audiophile 24/96 at at usb-0000:00:1d.7-3, high spead
> 4 [M2496 ]: USB-Audio - Musical Fidelity V90-DAC 24/96
> Musical Fidelity Musical Fidelity V90-DAC 24/96
> at usb-0000:00:1d.0-1, full speed
> 29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
> ThinkPad Console Audio Control at EC reg 0x30, fw 7KHT24WW-1.08
CCRMA Kernel (Realtime Kernel)
Repositories
yum localinstall http://ccrma.stanford.edu/planetccrma/mirror/fedora/linux/planetccrma/21/x86_64/planetccrma-repo-1.1-3.fc21.ccrma.noarch.rpm
yum localinstall http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-21.noarch.rpm
yum localinstall http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-21.noarch.rpm
Real-Time Kernel
Um Musik unter Linux anständig wiedergeben zu können müssen wir den sog.
realtime kernel verwenden.
vi /etc/yum.conf
→ /etc/yum.conf:
...
installonly_limit=0
...
← /etc/yum.conf:
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* kernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
yum install planetccrma-core kernel-rt kernel-headers kernel-tools kernel-tools-libs
Standard Kernel
Um bei zukünftigen Betriebssystem Updates den Realtime Kernel nicht durch den Standardkernel zu ersetzen, klammern wir die entsprechenden Pakete aus.
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* k
ernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
Sicherheitshalber löschen wir nun auch die Standard Kernel.
yum erase kernel kernel-core kernel-modules kernel-modules-extra
Und jetzt den Betriebssystem Update um zu schauen, ob der Standard-Kernel nicht wieder zurückkehrt.
yum update
Den Realtime Kernel zum Grub Standardkernel werden zu lassen können wir uns sparen, da es keine Standardkernel mehr gibt, aber trotzdem als Anmerkung der Vollständigkeit halber:
grub2-set-default "Fedora (3.14.25-200.rt22.1.fc21.ccrma.x86_64+rt) 21 (Twenty One)"
reboot
Weitere Betriebssystem-Anpassungen
selinux deaktivieren
vi /etc/sysconfig/selinux
→ /etc/sysconfig/selinux:
...
SELINUX=disabled
...
← /etc/sysconfig/selinux:
Prozesse abschalten
systemctl disable auditd.service
systemctl stop auditd.service
systemctl disable avahi-daemon.socket
systemctl stop avahi-daemon.socket
systemctl disable avahi-daemon.service
systemctl stop avahi-daemon.service
systemctl disable bluetooth.service
systemctl stop bluetooth.service
systemctl disable smartd.service
systemctl stop smartd.service
systemctl disable tcsd.service
systemctl stop tcsd.service
Prozesse einschalten
--------------------
systemctl enable sshd.service
systemctl start sshd.service
Benutzer mit Superuserrechten ausstatten
visudo
→ /etc/yum.conf:
...
root ALL=(ALL) ALL
hu ALL=(ALL) NOPASSWD: ALL
...
← /etc/yum.conf:
Video Card Driver
Der von mir verwendete Laptop ist mit einer Nvidia Grafikkarte ausgestattet.
lspci | grep -i vga
> 01:00.0 VGA compatible controller: NVIDIA Corporation G86M [Quadro NVS 140M] (rev a1)
Ich möchte nicht den Freeware Treiber nouvea verwenden, sondern vertraue auf den proprietären Hersteller-Treiber. Der für meine Karte ist der Linux x64 (AMD64/EM64T) Display Driver, Version 340.xx
vi /etc/yum.conf
→ /etc/yum.conf:
...
exclude=xorg-x11-drv-nouveau-*
...
← /etc/yum.conf:
yum erase xorg-x11-drv-nouveau
vi /etc/modprobe.d/nouveau.conf
→ /etc/modprobe.d/nouveau.conf:
blacklist nouveau
← /etc/modprobe.d/nouveau.conf:
vi /etc/default/grub
→ /etc/default/grub:
...
GRUB_CMDLINE_LINUX="rhgb quiet rdblacklist=nouveau"
...
← /etc/default/grub:
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/sda
systemctl set-default multi-user.target
yum install akmod-nvidia-340xx xorg-x11-drv-nvidia-340xx-libs kernel-rt-devel acpid
reboot
Wer behauptet ich wäre paranoid veranlagt, weil ich den nouveau Treiber doppelt und dreifach unterbunden habe, hat recht. So ist es leider.
vi /etc/X11/xorg.conf
→ /etc/X11/xorg.conf:
# RPM Fusion - nvidia-xorg.conf
#
Section "Device"
Identifier "Videocard0"
Driver "nvidia"
EndSection
← /etc/X11/xorg.conf:
Falls "startx" klappt:
systemctl set-default graphical.target
reboot
Benutzer anlegen (falls noch nicht geschehen)
mkdir /local/home
echo "scc:x:750:" >> /etc/group
useradd -d /local/home/hu -u 7513 -g 750 hu
passwd hu
Audiouser "hu" den richtigen Gruppen zuordnen
Damit keine Rechte-Probleme beim Zugriff auf die Audio-Devices durch Benutzer entstehen müssen diese den entsprechenden Gruppen hinzugefügt werden.
sudo usermod -a -G audio hu
sudo usermod -a -G jackuser hu
grep hu /etc/group
> audio:x:63:hu
> jackuser:x:981:hu
disable pulse audio
Es existiert die Möglichkeit die Verwendung von Pulsaudio pro Benutzer zu steuern.
mkdir ~/.pulse
echo ‘autospawn = no’ > ~/.pulse/client.conf
Meine Erfahrung ist, das Pulsaudio vom System trotzdem gestartet wird. Ich bevorzuge deshalb Pulsaudio systemweit für alle Zeiten den Garaus zu machen. Aus audiophiler Sicht ist das Pulsaudiosystem der größte Quatsch, den man sich vorstellen kann.
chmod -x /usr/bin/pulseaudio
vi /etc/yum.repos.d/fedora-updates.repo
→ /etc/yum.repos.d/fedora-updates.repo:
...
[updates]
...
exclude=kernel-[0-9]* kernel-devel-[0-9]* kernel-headers-[0-9]* kernel-tools-* kernel-tools-libs-* kernel-core-* k
ernel-modules-* kernel-modules-extra-* pulseaudio-*
...
← /etc/yum.repos.d/fedora-updates.repo:
Reihenfolde der Soundkarten im System (nicht für Firewire Devices)
Zunächst einmal die Liste der Soundkarten aufrufen, die Alsa gefunden hat:
cat /proc/asound/cards
> 0 [Intel ]: HDA-Intel - HDA Intel
> HDA Intel at 0xfe220000 irq 49
> 1 [M2496 ]: USB-Audio - Musical Fidelity V90-DAC 24/96
> Musical Fidelity Musical Fidelity V90-DAC 24/96
> at usb-0000:00:1d.0-1, full spe
>29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
> ThinkPad Console Audio Control at EC reg 0x30,
> fw 7KHT24WW-1.08
Welches sind die entsprechenden Kernel-Module?
cat /proc/asound/modules
> 0 snd_hda_intel
> 1 snd_usb_audio
> 29 thinkpad_acpi
Die Reihenfolge ändern:
vi /etc/modprobe.d/sound-cards-order.conf
→ /etc/modprobe.d/sound-cards-order.conf:
options snd_usb_audio index=0
options snd_hda_intel index=1
options thinkpad_acpi index=29
← /etc/modprobe.d/sound-cards-order.conf:
reboot
Kontrolle:
cat /proc/asound/modules
Alsa Konfiguration (nicht für Firewire Devices)
Ziel ist es von der Anwendung direkt auf den Alsa-Kernellayer zuzugreifen. Dabei soll unter Anderem ein Resampling unterbunden werden, d.h. die Audiodaten sollen 1:1 vom Sounddevice wiedergegeben werden.
Ein Mixer (so dass z.B. mehrere Anwendungen gleichzeitig auf das Sound-Device zugreifen können) soll nicht bereitgestellt werden.
Sound Device mit Namen "default" erstellen:
vi ~/.asoundrc
→ ~/.asoundrc:
pcm.snd_usb_audio {
type hw
card 0
device 0
}
ctl.snd_usb_audio {
type hw
card 0
device 0
}
ctl.!default {
type hw
card 0
device 0
}
# Create a default pcm, use the "plug" wrapper
# to wrap the named PCM we created above.
#
# Plug will adjust sample format as needed; we can
# force it to never change the sample rate! Nice.
#
pcm.!default {
type plug
slave {
pcm "snd_usb_audio"
rate "unchanged"
}
}
← ~/.asoundrc:
Autologin für den neuen Audio Benutzer
vi /etc/lxdm/lxdm.conf
→ /etc/lxdm/lxdm.conf:
...
[base]
autologin=hu
...
← /etc/lxdm/lxdm.conf:
Bei den nun folgenden Optimiereungen hat mir das Perl-Script "realTimeConfigQuickScan" geholfen.
Installiert wird es durch:
yum install realTimeConfigQuickScan
X-Server für lokales Display abschalten
Eine feine Sache ist es den Audio-PC über Laptop oder Touch-Pad bzw. Handy fernsteuern zu können. Dies geschieht am einfachsten über das sog. VNC-Protokoll (siehe unten).
In diesem Fall ist es denkbar, auf einen lokalen X-Server gänzlich zu verzichten. Ich mache das so.
Zum deaktivieren des lokalen X-Servers folgenden Befehl absetzen:
systemctl set-default multi-user.target
reboot
Kernel and real-time capabilities
Der Sinn in der Verwendung eines Kernel mit Echtzeitfähigkeiten liegt in dessen Fähigkeit niedrige Latzenzen für die Widergabe von Audio-Dateien zu ermöglichen.
Der Realtime-Kernel-Test im Script "realTimeConfigQuickScan" fragt leider nicht die richtigen Kernel-Config-Parameter ab. Ob der Kernel über entsprechende Fähigkeiten verfügt findet man heraus durch:
grep CONFIG_PREEMPT= /boot/config-`uname -r`; \
grep CONFIG_PREEMPT_RT_BASE= /boot/config-`uname -r`; \
grep CONFIG_PREEMPT_RT_FULL= /boot/config-`uname -r`
> CONFIG_PREEMPT=y
> CONFIG_PREEMPT_RT_BASE=y
> CONFIG_PREEMPT_RT_FULL=y
filesystem (noatime)
Weitere Informationen unter: http://wiki.linuxmusicians.com/doku.php ... ilesystems
vi /etc/fstab
→ /etc/fstab:
...
/dev/sda1 / ext4 defaults,noatime 1 1
/dev/sda5 /local ext4 defaults,noatime 1 2
...
← /etc/fstab:
CPU Frequenzy
Oft wird unter Fedora die CPU nicht mit ihrer maximalen Taktrate betrieben, sondern erst im Bedarfsfall hochgetaktet. Darauf sollte man sich nicht verlassen und stattdessen den Rechner /sollte die CPU dies unterstützen) immer mit vollem CPU-Takt betreiben.
siehe: https://access.redhat.com/documentation ... rnors.html und http://linuxmusicians.com/viewtopic.php?f=27&t=844
Achtung bei Laptops! Kann tüchtig in die Hose gehen.
yum install cpupowerutils
cpupower frequency-info --hwfreq
> analysiere CPU 0:
> 1000000
Falls der Rechner kein "cpupower frequency-set" unterstützt wird der Folgende Befehl schlimmstenfalls mit einem Kernel-Dump enden. Also sicherheitshalber vorher alle geöffneten Dateien schließen.
cpupower frequency-set -g performance
> Setting cpu: 0
> Setting cpu: 1
cpupower frequency-info --hwfreq
> analysiere CPU 0:
> 2600000
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
...
cpupower frequency-set -g performance
...
← /etc/rc.d/rc.local:
Falls noch nicht geschehen:
chmod 755 /etc/rc.d/rc.local
Prozesse mit chrt priorisieren
Um Prozesse wie unter Anderem den Jack-Daemon priorisieren zu dürfen müssen folgende Anpassungen durchgeführt werden:
mv /etc/security/limits.d/95-jack.conf /etc/security/limits.d/95-jack.conf.do_not_use
vi /etc/security/limits.conf
→ /etc/security/limits.conf:
...
# Optimization for Jack-Daemon and realtimepriority
# see: http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
@audio - rtprio 99
@audio - nice -19
@audio - memlock unlimited
@jackuser - rtprio 99
@jackuser - nice -19
@jackuser - memlock unlimited
...
← /etc/security/limits.conf:
Die Änderungen werden erst nach einem relogin wirksam.
Swap abschalten
Sobald nicht genügend Hauptspeicher für alle Programme auf dem Rechner bereitsteht, beginnt normalerweise das Betriebssystem virtuellen Hauptspeicher auf der Festplatte zu verwenden, also zu swappen. Dies ist für eine Audioworkstation unbrauchbar.
Ich schalte das swapping deshalb vollständig aus.
vorher:
sysctl vm.swappiness
vm.swappiness = 60
vi /etc/sysctl.d/99-sysctl.conf
→ /etc/sysctl.d/99-sysctl.conf:
...
vm.swappiness = 0
...
← /etc/sysctl.d/99-sysctl.conf:
reboot
nachher:
sysctl vm.swappiness
vm.swappiness = 0
Hardware Timer
Dieser Abschnitt betrifft vorwiegend ALSA-Midi. Evtl benutzen ja einige dieses, deshalb
sollen die Hardware-Timer nicht unerwähnt bleiben.
vi /etc/udev/rules.d/40-timer-permissions.rules
→ /etc/udev/rules.d/40-timer-permissions.rules:
KERNEL=="rtc0", GROUP="audio"
KERNEL=="hpet", GROUP="audio"
← /etc/udev/rules.d/40-timer-permissions.rules:
Nun können Benutzer aus der "audio"-Gruppe timer verwenden. Dies aber nur mit einer zu niedrigen Priorität, siehe:
cat /proc/sys/dev/hpet/max-user-freq
> 64
cat /sys/class/rtc/rtc0/max_user_freq
> 64
Es herrscht leider keine Einigkeit über den "richtigen" Wert für die Priorisierung der Hardware Timer. Sinnvoller Weise sollte sich diese wohl zwischen 1024 und 8192 bewegen.
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n 3072 > /sys/class/rtc/rtc0/max_user_freq
echo -n 3072 > /proc/sys/dev/hpet/max-user-freq
...
← /etc/rc.d/rc.local:
Falls noch nicht geschehen:
chmod 755 /etc/rc.d/rc.local
reboot
cat /proc/sys/dev/hpet/max-user-freq
> 3072
cat /sys/class/rtc/rtc0/max_user_freq
> 3072
Software Timer
Über threadet IRQs möchte ich an dieser Stelle keine Worte verlieren. Wer sich für die Hintergründe interessiert, dem empfehle ich eine Recherche im Internet. Wichtig ist dieser Abschnitt auf jedenfall mindestens für alle, die den Jack-Daemon für die Soundausgabe verwenden. Allgemein sollten jedoch alle mit USB-Sounddevices ihren Augenmerk auf diese Optimierung lenken.
Zunächst einmal prüfe ich, welchen IRQ meine Firewire-Soundkarte denn verwendet. Ein Blick
auf folgende URLs sei empfohlen:
http://lwn.net/Articles/143397
http://wiki.linuxaudio.org/wiki/system_ ... ng_devices
grep firewire /proc/interrupts
> 22: 0 84 IO-APIC 22-fasteoi ehci_hcd:usb1, firewire_ohci
OK ... den IRQ 22. Den teilt sie sich dann auch noch mit dem USB Controller 1. Nicht so gut.
Das wollen wir dem System zunächsteinmal abgewöhnen.
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n "0000:00:02.1" > /sys/bus/pci/drivers/ehci-pci/unbind
...
← /etc/rc.d/rc.local:
Falls noch nicht geschehen:
chmod 755 /etc/rc.d/rc.local
reboot
grep firewire /proc/interrupts
> 22: 0 83 IO-APIC 22-fasteoi firewire_ohci
Schon besser!
Und hier mal ein Beispiel für einen wirklich übervölkerten Interrupt:
grep firewire /proc/interrupts
> 16: 105 121 IO-APIC 16-fasteoi uhci_hcd:usb5, yenta, i915, firewire_ohci, yenta, mmc0
Hier wird es etwas komplizierter. Das hwinfo Skript aus der Suse-Distribution könnte uns weiterhelfen.
yum install wget
wget http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_21/home:zhonghuaren.repo -O /etc/yum.repos.d/rpm-sphere.repo
yum install hwinfo
Wir fangen ganz herkömmlich wie schon in Beispiel zuvor mit demusb5 an:
tree /sys/bus/usb/drivers/usb/ | grep usb5
> └── usb5 -> ../../../../devices/pci0000:00/0000:00:1d.3/usb5
also:
echo -n "0000:00:1d.3" > /sys/bus/pci/drivers/uhci_hcd/unbind
Als nächstes yenta ... Wirklich blöd, dass der PCMCIA Slots sich den IRQ mit dem Firewire-Interface teilt. Aber was solls, weg damit.
hwinfo > /tmp/hwinfo
grep yenta_cardbus: /tmp/hwinfo
> yenta_cardbus: /devices/pci0000:00/0000:00:1e.0/0000:08:03.0
> yenta_cardbus: /devices/pci0000:00/0000:00:1e.0/0000:08:03.1
also:
echo -n "0000:08:03.0" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.1" > /sys/bus/pci/drivers/yenta_cardbus/unbind
Nun zum SD-Kartenleser:
grep mmc0 /tmp/hwinfo | grep /devices/pci
> P: /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> P: /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
> E: DEVPATH=/devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
> /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/leds/mmc0::
> /devices/pci0000:00/0000:00:1e.0/0000:08:03.2/mmc_host/mmc0
also:
echo -n "0000:08:03.2" > /sys/bus/pci/drivers/sdhci-pci/unbind
Und letztlich zur Grafikkarte:
Das ist natürlich ärgerlich, das sich die Grafikkarte und die Firewire-Karte den gleichen IRQ teilen. Damit müssen wir dann wohl leben.
grep i915 /tmp/hwinfo | grep /devices/pci
> i915: /devices/pci0000:00/0000:00:02.0
> i915: /devices/pci0000:00/0000:00:02.0
> i915: /devices/pci0000:00/0000:00:02.0
also:
echo -n "0000:00:02.0" > /sys/bus/pci/drivers/i915/unbind
Und tschüß Grafik. Den Befehl lassen wir dann wohl besser.
Um das Ganze auch beim nächsten Neustart wieder vorzufinden muss alles
in die rc.local eingetragen werden.
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
#!/bin/sh
...
echo -n "0000:00:1d.3" > /sys/bus/pci/drivers/uhci_hcd/unbind
echo -n "0000:08:03.0" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.1" > /sys/bus/pci/drivers/yenta_cardbus/unbind
echo -n "0000:08:03.2" > /sys/bus/pci/drivers/sdhci-pci/unbind
...
← /etc/rc.d/rc.local:
Falls noch nicht geschehen:
chmod 755 /etc/rc.d/rc.local
reboot
grep firewire /proc/interrupts
> 16: 103 0 IO-APIC 16-fasteoi firewire_ohci, i915
Schon besser! Mit dem shared-IRQ der Grafikkartemüssen werden wir leider leben müssen.
Als letztes ein Beispiel für eine USB-Soundkarte:
Auf welchem Interface befindet sich das USB-Sound Device?
hwinfo | grep snd-usb-audio | grep /usb
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.1
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0
> snd-usb-audio: /devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.1
Wie verhält es sich mit dem entsprechenden IRQ?
grep usb2 /proc/interrupts
> 19: 79 74 IO-APIC-fasteoi ehci_hcd:usb2
Wunderbar, es muss nichts optimiert werden.
als nächstes wird das Script zur Verwendung sog. threadet IRQs von Rui Nuno Capela installiert:
yum install rtirq
Die Konfiguration erfolgt über die Datei /etc/sysconfig/rtirq.
vi /etc/sysconfig/rtirq
→ /etc/sysconfig/rtirq:
#
# Copyright (c) 2004-2013 rncbc aka Rui Nuno Capela.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# /etc/sysconfig/rtirq
# /etc/default/rtirq
#
# Configuration for IRQ thread tunning,
# for realtime-preempt enabled kernels.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 or later.
#
# IRQ thread service names
# (space separated list, from higher to lower priority).
# For ALSA supported Hardware:
# RTIRQ_NAME_LIST="rtc snd i8042"
# For not ALSA supported Hardware like firewire snd-devicer for example:
RTIRQ_NAME_LIST="rtc firewire usb"
# Highest priority.
# RTIRQ_PRIO_HIGH=70
RTIRQ_PRIO_HIGH=90
# Priority decrease step.
RTIRQ_PRIO_DECR=5
# Lowest priority.
RTIRQ_PRIO_LOW=65
# Priority for udev rules
RTIRQ_PRIO_UDEV=70
# Default priority for irq processes
RTIRQ_PRIO_DEFAULT=50
# Whether to reset all IRQ threads to SCHED_OTHER.
RTIRQ_RESET_ALL=0
# On kernel configurations that support it,
# which services should be NOT threaded
# (space separated list).
# For ALSA supported Hardware:
# RTIRQ_NON_THREADED="rtc snd"
# For not ALSA supported Hardware like firewire snd-devicer for example:
RTIRQ_NON_THREADED="rtc firewire usb"
# Process names which will be forced to the
# highest realtime priority range (99-91)
# (space separated list, from highest to lower priority).
# RTIRQ_HIGH_LIST="timer"
← /etc/sysconfig/rtirq:
systemctl enable rtirq.service
systemctl start rtirq.service
Muteproblem beheben bei Verwendung vom XMOS-Chipsatz wie z.B. mit einer Gustard U12
Nachdem auch meine Gustard urplötzlich stumm blieb fand ich hier im Forum die Lösung des Problems.
Ich unmute die Karte nun jedesmal beim Systemstart.
vi /etc/rc.d/rc.local
→ /etc/rc.d/rc.local:
...
CARD=0
amixer -c $CARD scontrols | sed -e 's/^Simple mixer control //' | while read line; do
amixer -c $CARD sset "$line" unmute;
done
...
← /etc/rc.d/rc.local:
Bildschirmschoner deaktivieren
Über das Startmenü:
Einstellungen; Bildschirmschoner; Bildschirmschoner deaktivieren
Jack konfigurieren und starten (bei Verwendung von Firewire Devices)
Der Soundserver Jackd benötigt zum zuverlässigen Betrieb besondere Rechte. Diese Rechte kann man der Gruppe audio zuweisen, indem man mit einem Editor mit Root-Rechten die Datei /etc/security/limits.conf bearbeitet (wie ja oben schon beschrieben, hier aber nochmal als Hinweis).
vi /etc/security/limits.conf
→ /etc/security/limits.conf:
...
# Optimization for Jack-Daemon and realtimepriority
# see: http://wiki.ubuntuusers.de/Tonstudio/Konfiguration
@audio - rtprio 99
@audio - nice -19
@audio - memlock unlimited
@jackuser - rtprio 99
@jackuser - nice -19
@jackuser - memlock unlimited
...
← /etc/security/limits.conf:
Die Rechte stehen erst nach einer Neuanmeldung am System zur Verfügung. Siehe auch: "Audiouser den richtigen Gruppen zuordnen" weiter oben.
Mit dem Programm "qjackctl" existiert eine graphische Anwendung, über die sich der Jack-Daemon
einfach konfigurieren und steuern lässt.
qjackctl
> Server Präfix: /usr/bin/jackd
> Treiber: firewire
> Echtzeit: ja
> Priorität: 80
> Ausführliche Meldungen: ja (während der Testphase)
> Frames/Periode: 64 (WICHTIG: spiel damit und schau wie hoch du kommst)
> Abtastrate: 96000 (evtl auch: 192000)
> Perioden/Puffer: 3
> Maximaler Port: 128
> Timeout (ms): 500
> Schnittstelle: hw:1 (evtl auch: hw:M192kHz oder hw:0)
> Audio: Duplex
> Startverzögerung: 2ms
> Latenz: 2ms
ps -ef | grep -i jackd
> hu 1715 1711 30 07:49 ? 00:00:04 /usr/bin/jackd -v -P80 -p128 -dfirewire
> -dhw:0 -r96000 -p64 -n3
Musik Player
Audacious
Audacious ist ein Fork des Beep Media Player (BMP). Die Arbeiten am BMP, der wiederum auf XMMS basierte, wurden schon vor längerer Zeit eingestellt.
Winamp "Classic Skins" können aber mit Audacious weiter benutzt sowie Winamp-Equalizer-Einstellungen importiert werden.
Zu den unterstützten Formaten gehören unter anderen MP3, MP4, MPEG-Audio, CD-Audio, AAC, SID, MOD, Ogg Vorbis, FLAC, WAV, WMA und NSF. Darüber hinaus unterstützt Audacious Internetradio, LIRC und LastFM/Audioscrobbler.
Das Ziel der Entwickler war es, mit Audacious einen entschlackten, schnellen, stabilen und funktionellen Audioplayer zu erstellen. Den nehme ich.
yum install audacious audacious-libs audacious-plugins audacious-plugins-jack
Ein paar Sachen müssen in Audacious konfiguriert werden. Dazu in Audacios die Einstellungen wählen:
Audacios Konfiguration für Firewire Audiodevices
audacious
→ Audacious Konfiguration:
> Datei; Einstellungen
> Audio: Ausgabe-Plugin: JACK Ausgabe
>
> Bittiefe: 32
>
> Softwareseitige Amplitudenbegerenzung: nein
> Softwareseitige Lautstärkeregelung: nein
> Wiedergabeverstärkung aktivieren: nein
← Audacious Konfiguration:
Audacious Konfiguration für USB und PCI Audiodevices
Audacious soll über das neu geschaffene "default" Audio-device Musikdateien
abspielen.
audacious
→ Audacious Konfiguration:
> Datei; Einstellungen
> Audio: Ausgabe Plugin: ALSA Ausgabe
> Einstellungen: PCM-Gerät: default
> Mixer-Gerät: hw:1 (HDA-Intel)
> Bittiefe: 32
> Puffergröße: 1500 ms
>
> Softwareseitige Amplitudenbegerenzung: nein
> Softwareseitige Lautstärkeregelung: nein
> Wiedergabeverstärkung aktivieren: nein
← Audacious Konfiguration:
Wer genau hinschaut bemerkt, dass ich unter den ALSA-Einstellungen als Mixer-Gerät auf die interne Soundkarte meines Laptops verwiesen habe.
Für die zu verwendende Soundkarte habe ich absichtlich kein Mixer-Element definiert doch Audacious verlangt bei der Konfiguration zwingend nach einem.
Wenn ich in Audacious unter Mixer-Gerät auf mein "default" Sounddevice verweise (also: "default (Standard-Mixer-Gerät)"), so erscheint (bei manchen der von mir getesteten Soundkarten) bein Starten von Audacious immer die Fehlermeldung "ALSA error: snd_mixer_attach failed: Das Argument ist ungültig".
Das nervt natürlich. Mit der beschriebenen Vorgehensweise vermeide ich aber die Fehlermeldung. Nicht schön? Finde ich auch. Über sachdienliche Hinweise würde ich mich freuen.
DeaDBeeF - Ultimate Music Player For GNU/Linux
DeaDBeeF hat mir auch auf Anhieb gefallen. Den verwende ich also auch.
Installation:
cd /etc/yum.repos.d
wget https://copr.fedoraproject.org/coprs/polarbear/deadbeef/repo/fedora-21/polarbear-deadbeef-fedora-21.repo
yum install deadbeef
DeaDBeeF Konfiguration für Firewire Audiodevices
Zunächst muss das Plugin zur Wiedergabe von Musik über den Jack-Daemon installiert werden. Die findet sich, neben anderen Plugins auf folgender Internet-Seite:
http://deadbeef.sourceforge.net/plugins.html
Ich habe es in den /tmp Systemordner kopiert. Zur Installation als Audio-Benutzer (nicht root!) dann wie folgt vorgehen:
cd /tmp
unzip jack-62d1e6a-x86_64.zip
mkdir -p ~/.local/lib/deadbeef
cp ./plugins/jack.so ~/.local/lib/deadbeef
rm -fr ./jack-62d1e6a-x86_64.zip ./plugins
→ DeaDBeeF Konfiguration:
> Bearbeiten; Einstellungen
> Audio-Tab;
> Ausgabe-Plugin: Jack output plugin
> Bearbeiten; Einstellungen
> Erweiterungen-Tab;
> JACK-Output-Plugin; Einstellungen;
> Start JACK server automaticaly if not already running: NEIN!
← DeaDBeeF Konfiguration:
DeaDBeeF Konfiguration für USB und PCI Audiodevices
→ DeaDBeeF Konfiguration:
> Bearbeiten; Einstellungen
> Audio-Tab;
> Ausgabe-Plugin: ALSA
> Ausgabe-Gerät: Standard Ausgabegerät
> Bearbeiten; Einstellungen
> Erweiterungen-Tab;
> ALSA-Output-Plugin; Einstellungen;
> ALSA resampling verwenden: NEIN!
← DeaDBeeF Konfiguration:
gnome-mplayer
Der gnome-mplayer ist kein eigentlicher Mediaplayer, sondern vielmehr nur ein graphisches Front/End für den kommandozeilenbasierenden mplayer. Gnome-mplayer übernimmt die Benutzerinteraktion und führt im Betrieb einzeln die selektierten Mediadateien an den mplayer weiter.
Dies brachte mich auf die Idee ein kleine Script zu erstellen, dass anstelle von mplayer durch den gnome-mplayer aufgerufen wird, die Mediendaten auf eine Ramdisk kopiert und danach erst den eigentlichen mplayer aufruft.
Die Funktionalität von gnome-mplayer wird dadurch nicht beeinträchtigt. Lediglich die Pausen zwischen den einzelnen Musiktracks werden etwas länger.
Installation:
yum install gnome-mplayer
Erzeugung des Wrapper-Scriptes:
mkdir ~/etc
vi ~/etc/mplayer-wrapper.sh
→ ~/etc/mplayer-wrapper.sh:
#!/bin/sh
#################################
#
# Name: mplayer-wrapper.sh
# Date: Di 12. Mai 07:22:42 CEST 2015
# Version: 0.1
#
# Wrapper for the mplayer used from gnome-mplayer.
#
# Files are copied to a ramdisk and played afterwards with a realtime enhanced
# call of mplayer.
#
#################################
DEBUG=1
LOGFILE=/tmp/mplayer-wrapper.log
DELETELOGFILE=1
RAMDIKSIZE=768M
RAMDISKPATH="/run/media/`id -n -u`/audio"
MPLAYER="/bin/chrt 50 /bin/mplayer"
DELETESOFTVOL=1
# do some debugging
#
if [ "$DELETELOGFILE" -eq "1" ]; then
if [ -f "$LOGFILE" ]; then
rm $LOGFILE
fi
fi
if [ "$DEBUG" -gt "0" ]; then
if [ ! -f "$LOGFILE" ]; then
touch $LOGFILE
fi
fi
# Create a bash array for all the arguments passed to this script
#
i=0
argv=()
for arg in "$@"; do
if [ "$DELETESOFTVOL" == "1" ] && [ "$arg" == "-softvol" ]; then
argv[$i]=""
else
argv[$i]="$arg"
fi
i=$((i + 1))
done
NumberOfArguments=$i
if [ "$DEBUG" -gt "0" ]; then
printf "Arguments\n---------\n" >> $LOGFILE
echo $@ >> $LOGFILE
printf "\nnumber of arguments\n-------------------\n" >> $LOGFILE
echo $NumberOfArguments >> $LOGFILE
printf "\nMediafile\n---------\n" >> $LOGFILE
echo ${argv[$((NumberOfArguments - 1))]} >> $LOGFILE
fi
if [ ! -d "$RAMDISKPATH" ]; then
sudo mkdir -p "$RAMDISKPATH"
sudo chown "`id -n -u`.`id -n -g`" "$RAMDISKPATH"
fi
# mount ramdisk directory
#
if [ -z "`mount | grep "$RAMDISKPATH"`" ]; then
sudo mount -t tmpfs -o size="$RAMDIKSIZE" none "$RAMDISKPATH"
fi
# clean ramdisk
#
rm "$RAMDISKPATH"/*
# copy mediafile to ramdisk
#
cp "${argv[$((NumberOfArguments - 1))]}" "$RAMDISKPATH"
# Create a changed bash array for all the arguments passed to this script
# with new path to ramdisked mediafile
#
i=0
newargs=""
for newarg in "${argv[@]}"; do
newargs="$newargs $newarg"
if [ "$i" -eq "$(($NumberOfArguments-2))" ]; then
break
fi
i=$((i + 1))
done
RamdiskedMediaFile="$RAMDISKPATH/`basename "${argv[$((NumberOfArguments - 1))]}"`"
if [ "$DEBUG" -gt "0" ]; then
printf "\nnew Arguments\n-------------\n" >> $LOGFILE
printf "$newargs\n" >> $LOGFILE
printf "\nmplayer call\n------------\n" >> $LOGFILE
printf "$MPLAYER $newargs $RamdiskedMediaFile" >> $LOGFILE
fi
# call mplayer
#
$MPLAYER $newargs "$RamdiskedMediaFile"
# clean ramdisk
#
rm "$RAMDISKPATH"/*
← ~/etc/mplayer-wrapper.sh:
Konfiguration gnome-mplayer:
gnome-mplayer
→ gnome-mplayer Konfiguration:
> Bearbeiten; Einstellungen
> Wiedergabe Reiter:
> Audioausgabe: Standard
> MPlayer Reiter:
> Benutzung MPlayer-Software-Lautstärgeregelung: NEIN!
> Ausführbare Datei von MPlayer: mplayer-wrapper.sh
← gnome-mplayer Konfiguration:
Obwohl ich innerhalb der Konfiguration des gnome-mpayers die Verwendung der MPlayer-Software-Lautstärgeregelung abgeschaltet hatte, wurde diese immer wieder beim Aufruf des mpayer aktiviert.
Ich habe deshalb einen Schalter in des Wrapper-Script eingefügt, der der nachträglich den Schalter für die Software-Lautstärgeregelung aus der Argumentenliste nimmt (siehe: "DELETESOFTVOL=1" im Wrapper-Script).
Musikaufnahme
Audacity
Zum digitalisieren meiner Plattensammlung verwende ich seit Jahren Audacious. Das Programm ist einfach zu bedienen und erfüllt alle meine Abforderungen.
Die Installation erfolgt wie gehabt via yum:
yum install audacity
Konfiguration für Firewire Devices
audacity
→ Audacity Konfiguration:
> Bearbeiten; Einstellungen
> Geräte: Soundarchitektur: JACK Audio Connection Kit
> Wiedergabe Gerät: firewire_pcm
> Aufnahme Gerät; firewire_pcm
> Aufnahme Kanäle: Stereo
> Qualität:
> Standard-Samplefrequenz: 96000 Hz
> Standard-Sampleformat: 32-bit float
> Echtzeit-Umwandlung
> Samplefrequenz: Medium Quality
> Dither: keiner
> Hochwertige-Umwandlung
> Samplefrequenz: Best Quality
> Dither: Shaped
← Audacity Konfiguration:
Den Stream kontrollieren bei USB Audiodevices
Wenn man so weit gekommen ist, so sollte man am Besten verschiedene Audiodateien mit Audacious abspielen und kontrollieren wie die Daten des Streams zum USB-Audio-Device geartet sind.
Z.B. sollte dies wärend der Wiedergabe eines Musikstücks, dass mit 24bit/96kHz gesampelt wurde als Output generiert werden:
→ cat /proc/asound/card0/stream0:
Musical Fidelity Musical Fidelity V90-DAC 24/96 at usb-0000:00:1d.0-1, full spe : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 582
Momentary freq = 96007 Hz (0x60.01e8)
Feedback Format = 10.14
Interface 1
Altset 1
Format: S24_3LE
Channels: 2
Endpoint: 1 OUT (ASYNC)
Rates: 32000, 44100, 48000, 88200, 96000
← cat /proc/asound/card0/stream0:
Remote login über VNC
Wer seinen Audio-PC remote steuern will, dem seien folgende Links nahe gelegt.
http://docs.fedoraproject.org/en-US/Fed ... erVNC.html
http://stufs4u.wordpress.com/2014/02/25 ... fedora-20/
Die Fernsteuerung des Audio-PCs über VNC finde ich sehr sinnvoll. Man hat so quasi eine Fernbedienung auf seinem Laptop und das ganze ist vollkommen unempfindlich gegenüber Abbrüchen der Netzwerkverbindung zwischen VNC-Client und VNC-Server.
Bricht die Verbindung einmal ab, so läuft die Musik trotzdem weiter wie ursprünglich angewiesen über den VNC-Client. Dieser kann sich nach wiederhergestellter Netzwerkfunktionalität neu verbinden und bekommt sofort die Oberfläche des Servers angezeigt, wie sie vor dem Abbruch auch war.
Installation des Tiger VNC server Paketes
yum -y install tigervnc-server
Konfiguration des Tiger VNC server Paketes
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:10.service
Alle <USER> Strings mit dem Audio-Usernamen ersetzen:
vi /etc/systemd/system/vncserver@:10.service
→ /etc/systemd/system/vncserver@:10.service:
# The vncserver service unit file
#
# Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@.service
# 2. Edit <USER> and vncserver parameters appropriately
# ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")
# 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service`
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC, you should
# limit connections to the local host and then tunnel from
# the machine you want to view VNC on (host A) to the machine
# whose VNC output you want to view (host B)
#
# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB
#
# this will open a connection on port 590N of your hostA to hostB's port 590M
# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).
# See the ssh man page for details on port forwarding)
#
# You can then point a VNC client on hostA at vncdisplay N of localhost and with
# the help of ssh, you end up seeing what hostB makes available on port 590M
#
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
#
# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel. See the "-via" option in the
# `man vncviewer' manual page.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l hu -c "/usr/bin/vncserver %i"
PIDFile=/local/home/hu/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
← /etc/systemd/system/vncserver@:10.service:
Firewall-Freischaltung
firewall-cmd --permanent --zone=public --add-service vnc-server
Danach habe ich über firewall-config den TCP-Portrange des vnc-server Services
erweitert auf:
vnc-server: Proto TCP, Range 5900-5920
Password für den VNC-Benutzer
Als Audio-Benutzer (in meinem Fall: hu) lokal auf dem System einloggen. Dann:
vncpasswd
Password : ***
Verify : ***
Falls jemand ein leeres Password möchte:
vncpasswd -f > .vnc/passwd
[ENTER]
Aktivieren und Starten des VNC service
systemctl daemon-reload
systemctl enable vncserver@:10.service
systemctl start vncserver@:10.service
Verknüpfung auf dem LXDE-Desktop anlegen
Nachdem alle Pakete installiert sind und ich mich entschieden habe mittels Jack meine Audiohardware anzusteuern und Audacious als Audioplayer zu verwenden, lege ich zwei Iconen zum Schnellstart für die beiden Anwendungen auf dem Desktop an.
Ich klicke im laufenden Desktop mit der rechten Maustaste auf einen freien Bereich. In dem sich öffnenden Kontext-Menü wähle ich "Neu..." und darunter den Punkt "Leere Datei" (mit der Rechten Maus!). LXDE fragt mich nun nach einem Namen für die Datei und ich benenne sie nun "qjackctl.desktop". Wichtig ist das
".desktop", denn daran erkennt LXDE später, dass es sich um eine besondere Datei mit zusätzlichen Angaben handelt.
Die Datei liegt nun auf dem Desktop, Zeit zu hinterlegen was wir mit ihr starten wollen. Ich klicke mit der rechten Maustaste auf das neue Icon und wähle im Kontextmenü den Punkt Leafpad aus. Leafpad ist auf meinem System nach der Grundinstallation ein einfacher mitgelieferter Editor. Wer sein System
anders eingerichtet hat, hat womöglich einen anderen Texteditor hier aufgeführt, oder muss ihn manuell starten und darin unsere Datei öffnen. Sie befindet sich im Ordner ~/Schreibtisch, bei mir also in
/local/home/hu/Schreibtisch .
In die Datei schreibe ich nun folgende Inhalte hinein (Ehrlich gesagt habe ich es nicht wie oben beschrieben über die Maus und Klicks gemacht, sondern direkt die Desktop-Dateien mittels vi editiert.):
vi ~/Schreibtisch/qjackctl.desktop
→ ~/Schreibtisch/qjackctl.desktop:
[Desktop Entry]
Name=qjackctl
Comment=start and controll the Jack Daemon
Exec=/usr/bin/qjackctl
TryExec=/usr/bin/qjackctl
Icon=qjackctl
Type=Application
← ~/Schreibtisch/qjackctl.desktop:
Nach dem Abspeichern der Datei kann ich qjackctl nun über Doppelklick auf meine
neue Desktop Verknüpfung starten.
Das Gleiche wiederhole ich nun für die Anwendung "audacious", also:
vi ~/Schreibtisch/audacious.desktop
→ ~/Schreibtisch/audacious.desktop:
[Desktop Entry]
Name=audacious
Comment=start the audacious audio player
Exec=/usr/bin/audacious
Icon=audacious
Type=Application
← ~/Schreibtisch/audacious.desktop:
für DeaDBeeF:
vi ~/Schreibtisch/deadbeef.desktop
→ ~/Schreibtisch/deadbeef.desktop:
[Desktop Entry]
Name=deadbeef
Comment=start the deadbeef audio player
Exec=/usr/bin/deadbeef
Icon=deadbeef
Type=Application
← ~/Schreibtisch/deadbeef.desktop:
für den gnome-mplayer:
vi ~/Schreibtisch/gnome-mplayer.desktop
→ ~/Schreibtisch/gnome-mplayer.desktop:
[Desktop Entry]
Name=gnome-mplayer
Comment=start the gnome-mplayer audio player
Exec=/bin/gnome-mplayer
Icon=gnome-mplayer
Type=Application
← ~/Schreibtisch/gnome-mplayer.desktop:
und für die Anwendung "audacity", also:
vi ~/Schreibtisch/audacity.desktop
→ ~/Schreibtisch/audacity.desktop:
[Desktop Entry]
Name=audacity
Comment=start the audacity audio recorder
Exec=/usr/bin/audacity
Icon=audacity
Type=Application
← ~/Schreibtisch/audacity.desktop:
Prozessauslastung und Fazit
Und, haben die Systemoptimierungen etwas gebracht? Zunächsteinmal ein kurzer Blick
auf die Prozessliste:
top -H
> top - 07:32:34 up 21 min, 2 users, load average: 0,77, 0,84, 0,63
> Threads: 295 total, 1 running, 294 sleeping, 0 stopped, 0 zombie
> %Cpu0 : 12,0 us, 28,9 sy, 0,0 ni, 59,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
> %Cpu1 : 11,8 us, 19,7 sy, 0,0 ni, 65,0 id, 0,0 wa, 0,0 hi, 3,5 si, 0,0 st
> KiB Mem : 5850212 total, 4869388 free, 271948 used, 708876 buff/cache
> KiB Swap: 17577980 total, 17577980 free, 0 used. 5478896 avail Mem
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 1800 hu -85 0 859492 71088 50272 S 17,8 1,2 2:51.65 FW_ISORCV
> 1802 hu -50 0 859492 71088 50272 S 16,2 1,2 2:29.96 jackd
> 452 root -86 0 0 0 0 S 15,5 0,0 2:42.21 irq/22-fire+
> 1799 hu -87 0 859492 71088 50272 S 12,9 1,2 2:02.92 FW_ISOXMT
> 1901 hu -76 0 841432 73192 64804 S 5,3 1,3 0:02.10 audacious
Nicht irritieren lassen durch die "-50" als Priorität des Jack-Daemon. Das top Komando ist nicht das verlässlichste! Deshalb nochmal per ps-Komando:
ps axHo user,lwp,pid,priority,rtprio,ni,command | grep jackd
> ...
> hu 1778 1768 -86 85 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1779 1768 -2 1 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1780 1768 -87 86 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1781 1768 -85 84 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> hu 1782 1768 -81 80 - /usr/bin/jackd -v -P80 -p128 -dfirewire -dhw:1 -r96000 -p64 -n3
> ...
Wie man sehen kann profitieren die priorisierten Prozesse stark von den Realtime Eigenschaften des angepassten Musiksystems.
Dem FFADO-Firewire Treiber sowie dem Jack-Daemon, dem Interrupt-Handler, der für die Ausgabe der Daten über das Firewire-Interface des Rechners zuständig ist, und dem Ausioplayer audacious, werden die höchsten
Sytemprioritäten zugebilligt (-85, -81, -86, -76).
Die genannten Anwendungen machen regen Gebrauch von den zwei Cores des verwendeten Testsystems (17,8 % + 12,9 % FFADO, 16,2 % jackd, 15,5 % IRQ 22 Firewire-Karte und 5,3 % audacious).
Die Prozesse verteilen sich gleichmäßig auf die Cores.
Bei einem Quad-Core System wären weitere Anpassungen eventuell sinnvoll. Eine Verteilung der FFADO-Firewire Treiber, des Jack-Daemons, des Interrupt-Handlers und des Ausioplayers auf jeweils einen eigenen dedizierten Core wäre denkbar.
Und, wie klingt es?
Dazu später. Im Moment tun mir die Finger vom Tippen weh.