Я создал приложение. net core 3.1, которое использует pulseaudio в Ubuntu. Это работает отлично, когда я запускаю его непосредственно в консоле с помощью:
dotnet /home/ubuntu/LedGrpcService/LedGrpcService.dll
Но когда я запускаю его как linux сервис, я получаю следующую ошибку: ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
Это мой сервисный конфиг:
[Unit]
Description=Ambient Light LED in .NET
# Requires=xyz.service
# After=xyz.service
[Service]
Type=simple
WorkingDirectory=/home/ubuntu/LedGrpcService
ExecStart=/usr/share/dotnet-sdk/dotnet home/ubuntu/LedGrpcService/LedGrpcService.dll
User=ubuntu
[Install]
WantedBy=multi-user.target
Я полагаю, это проблема с правами доступа. Но я не уверен.
. Код ядра. net использует OpenTK для записи звука.
Код отлично работает при запуске как обычное приложение. Но не работает с услугой. Сервис работает под моим обычным пользователем, не являющимся root.
Код, пропущенный при доступе к Pulseaudio через OpenTK / OpenAL:
using OpenTK;
using OpenTK.Audio;
using OpenTK.Audio.OpenAL;
.
.
.
try
{
audio_context = new AudioContext();
}
catch (AudioException ae)
{
Console.WriteLine("Fatal: Cannot continue without a playback device.\nException caught when opening playback device.\n" + ae.Message);
return 1;
}
AL.Listener(ALListenerf.Gain, (float)1.0);
src = AL.GenSource();
double buffer_length_ms = 10; //10 ms buffer recordings //(double)numericUpDown_BufferLength.Value;
int buffer_length_samples = (int)((double)buffer_length_ms * samplingRate * 0.001 / BlittableValueType.StrideOf(buffer));
var devices = AudioCapture.AvailableDevices;
Console.WriteLine("Available Devices:");
for (int i = 0; i < devices.Count; i++)
{
Console.WriteLine("Device #{0}: {1}", i, devices[i]);
}
//Console.WriteLine("Select device number:");