1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-06 05:25:41 -05:00
Files
DankMaterialShell/core/internal/server/brightness/logind.go
2025-11-30 00:12:45 -05:00

67 lines
1.5 KiB
Go

package brightness
import (
"fmt"
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
"github.com/godbus/dbus/v5"
)
type DBusConn interface {
Object(dest string, path dbus.ObjectPath) dbus.BusObject
Close() error
}
type LogindBackend struct {
conn DBusConn
}
func NewLogindBackend() (*LogindBackend, error) {
conn, err := dbus.ConnectSystemBus()
if err != nil {
return nil, fmt.Errorf("connect to system bus: %w", err)
}
obj := conn.Object("org.freedesktop.login1", "/org/freedesktop/login1/session/auto")
call := obj.Call("org.freedesktop.DBus.Peer.Ping", 0)
if call.Err != nil {
conn.Close()
return nil, fmt.Errorf("logind not available: %w", call.Err)
}
conn.Close()
return &LogindBackend{}, nil
}
func NewLogindBackendWithConn(conn DBusConn) *LogindBackend {
return &LogindBackend{
conn: conn,
}
}
func (b *LogindBackend) SetBrightness(subsystem, name string, brightness uint32) error {
if b.conn == nil {
conn, err := dbus.ConnectSystemBus()
if err != nil {
return fmt.Errorf("connect to system bus: %w", err)
}
b.conn = conn
}
obj := b.conn.Object("org.freedesktop.login1", "/org/freedesktop/login1/session/auto")
call := obj.Call("org.freedesktop.login1.Session.SetBrightness", 0, subsystem, name, brightness)
if call.Err != nil {
return fmt.Errorf("dbus call failed: %w", call.Err)
}
log.Debugf("logind: set %s/%s to %d", subsystem, name, brightness)
return nil
}
func (b *LogindBackend) Close() {
if b.conn != nil {
b.conn.Close()
}
}