Tmds.DBus query works in the ConsoleApp but thrown exception in the my AvaloniaUI Applicaton
00:49 02 May 2026

I wanna get DE accent color from d-bus, so I try to call org.freedesktop.portal.Desktop with interface org.freedesktop.portal.Settings method ReadOne with namespace org.freedesktop.appearance and key accent-color

d-feet

I use library Tmds.DBusand create simple ConsoleAppto test

using Tmds.DBus.Protocol;

try
{
    var connection = new DBusConnection(DBusAddress.Session!);
    await connection.ConnectAsync();
    var writer = connection.GetMessageWriter();
    writer.WriteMethodCallHeader(
        destination: "org.freedesktop.portal.Desktop",
        path: "/org/freedesktop/portal/desktop",
        @interface: "org.freedesktop.portal.Settings", 
        member: "ReadOne",
        signature: "ss");
        
    writer.WriteString("org.freedesktop.appearance");
    writer.WriteString("accent-color");

    var message = writer.CreateMessage();

    var reply = await connection.CallMethodAsync(message, 
        (result, _) => result);

    var reader = reply.GetBodyReader();
    reader.AlignStruct();   
            
    reader.ReadInt64();
    var red = (int)(reader.ReadDouble() * 255);
    var green = (int)(reader.ReadDouble() * 255);
    var blue = (int)(reader.ReadDouble() * 255);

    Console.WriteLine($"RGB: {red}, {green}, {blue}");

  

}
catch (Exception e)
{
  Console.WriteLine(e.Message);
}

It works and returns corrent output:

RGB: 53, 168, 84

But THE SAME code in the my app throws exception:

System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
   at Tmds.DBus.Protocol.Reader..ctor(Boolean isBigEndian, ReadOnlySequence`1 sequence, UnixFdCollection handles, Int32 handleCount)
   at Tmds.DBus.Protocol.Message.GetBodyReader()
   at GMenu.Modules.LinuxSystem.LinuxThemeLoader.GetThemeHexAsync() in /home/themakarik/RiderProjects/g-menu/src/GMenu/Modules/LinuxSystem/LinuxThemeLoader.cs:line 27

    public async Task GetThemeHexAsync()
    {
        try
        {
            var connection = new DBusConnection(DBusAddress.Session!);
            await connection.ConnectAsync();
            var writer = connection.GetMessageWriter();
            writer.WriteMethodCallHeader(
                destination: "org.freedesktop.portal.Desktop",
                path: "/org/freedesktop/portal/desktop",
                @interface: "org.freedesktop.portal.Settings", 
                member: "ReadOne",
                signature: "ss");
        
            writer.WriteString("org.freedesktop.appearance");
            writer.WriteString("accent-color");

            var message = writer.CreateMessage();

            var reply = await connection.CallMethodAsync(message, 
                (result, _) => result);

            var reader = reply.GetBodyReader();
            reader.AlignStruct();   
            
            reader.ReadInt64();
            var red = (int)(reader.ReadDouble() * 255);
            var green = (int)(reader.ReadDouble() * 255);
            var blue = (int)(reader.ReadDouble() * 255);

            return new Rgb(red, green, blue);
        }
        catch (Exception e)
        {
            logger.Error("Exception: {exception}", e);
            return null;
        }
       
    }

Code usings:

  public override async void OnFrameworkInitializationCompleted()
    {
        try
        {
            //https://stackoverflow.com/questions/79933121/avaloniaui-strange-async-application-loading
            var provider = Services;
            LoadLocalization(provider);
            var logger = provider.GetRequiredService();
            logger.Information("Initializing GMenu...");
            await LoadMaterialThemeAsync(provider);
            logger.Information("Desktop files paths: {paths}", StaticConfiguration.PathToDesktopFiles);
            logger.Information("Desktop files icons path: {paths}", StaticConfiguration.PathsToRefineIcon);
            if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
                desktop.MainWindow = new MainWindow { DataContext = Services.GetRequiredService() };
            
            await LoadConfigurationAsync(provider).ConfigureAwait(false);
          
        
            base.OnFrameworkInitializationCompleted();
        }
        catch (Exception e)
        {
            Services.GetRequiredService().Error(e, "An error occured while initializing the application.");
            Console.WriteLine(e); 
            Environment.Exit(-1);
        }
    }
private async Task LoadMaterialThemeAsync(IServiceProvider provider)
    {
        using var scope = provider.CreateScope();
    
        var themeLoader = scope.ServiceProvider.GetRequiredService();
        var rgb = await themeLoader.GetThemeHexAsync();
        var color = new Color(255, (byte)rgb.Red, (byte)rgb.Green, (byte)rgb.Blue );
        var materialTheme = this.LocateMaterialTheme();
        materialTheme.BaseTheme = BaseThemeMode.Inherit;
        materialTheme.PrimaryColor = color;
        materialTheme.SecondaryColor = color;
        
        this.Resources["AccentColor"] = materialTheme.PrimaryColor;
    }

Can somebody explain why strange things like this happens, and how can I fix it

c# .net dbus avaloniaui