diff --git a/Emby.Server.Implementations/ConfigurationOptions.cs b/Emby.Server.Implementations/ConfigurationOptions.cs
index ff7ee085f..64ccff53b 100644
--- a/Emby.Server.Implementations/ConfigurationOptions.cs
+++ b/Emby.Server.Implementations/ConfigurationOptions.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using Emby.Server.Implementations.HttpServer;
-using Emby.Server.Implementations.Updates;
using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
namespace Emby.Server.Implementations
@@ -19,7 +18,8 @@ namespace Emby.Server.Implementations
{ HttpListenerHost.DefaultRedirectKey, "web/index.html" },
{ FfmpegProbeSizeKey, "1G" },
{ FfmpegAnalyzeDurationKey, "200M" },
- { PlaylistsAllowDuplicatesKey, bool.TrueString }
+ { PlaylistsAllowDuplicatesKey, bool.TrueString },
+ { BindToUnixSocketKey, bool.FalseString }
};
}
}
diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs
index 9fd706d36..f6ac4e2a3 100644
--- a/Jellyfin.Server/Program.cs
+++ b/Jellyfin.Server/Program.cs
@@ -344,11 +344,24 @@ namespace Jellyfin.Server
}
}
- // Bind to unix socket (only on OSX and Linux)
- if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ // Bind to unix socket (only on macOS and Linux)
+ if (startupConfig.UseUnixSocket() && !RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
- // TODO: allow configuration of socket path
- var socketPath = $"{appPaths.DataPath}/socket.sock";
+ var socketPath = startupConfig.GetUnixSocketPath();
+ if (string.IsNullOrEmpty(socketPath))
+ {
+ var xdgRuntimeDir = Environment.GetEnvironmentVariable("XDG_RUNTIME_DIR");
+ if (xdgRuntimeDir == null)
+ {
+ // Fall back to config dir
+ socketPath = Path.Join(appPaths.ConfigurationDirectoryPath, "socket.sock");
+ }
+ else
+ {
+ socketPath = Path.Join(xdgRuntimeDir, "jellyfin-socket");
+ }
+ }
+
// Workaround for https://github.com/aspnet/AspNetCore/issues/14134
if (File.Exists(socketPath))
{
diff --git a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
index c2932cc4c..4c2209b67 100644
--- a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
+++ b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
@@ -33,6 +33,16 @@ namespace MediaBrowser.Controller.Extensions
///
public const string PlaylistsAllowDuplicatesKey = "playlists:allowDuplicates";
+ ///
+ /// The key for a setting that indicates whether kestrel should bind to a unix socket.
+ ///
+ public const string BindToUnixSocketKey = "kestrel:socket";
+
+ ///
+ /// The key for the unix socket path.
+ ///
+ public const string UnixSocketPathKey = "kestrel:socketPath";
+
///
/// Gets a value indicating whether the application should host static web content from the .
///
@@ -65,5 +75,21 @@ namespace MediaBrowser.Controller.Extensions
/// True if playlists should allow duplicates, otherwise false.
public static bool DoPlaylistsAllowDuplicates(this IConfiguration configuration)
=> configuration.GetValue(PlaylistsAllowDuplicatesKey);
+
+ ///
+ /// Gets a value indicating whether kestrel should bind to a unix socket from the .
+ ///
+ /// The configuration to read the setting from.
+ /// true if kestrel should bind to a unix socket, otherwise false.
+ public static bool UseUnixSocket(this IConfiguration configuration)
+ => configuration.GetValue(BindToUnixSocketKey);
+
+ ///
+ /// Gets the path for the unix socket from the .
+ ///
+ /// The configuration to read the setting from.
+ /// The unix socket path.
+ public static string GetUnixSocketPath(this IConfiguration configuration)
+ => configuration[UnixSocketPathKey];
}
}