Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ TEST = \
${GOPKG_PREFIX}/service_trigger \
${GOPKG_PREFIX}/session/common \
${GOPKG_PREFIX}/session/eventlog \
${GOPKG_PREFIX}/session/power1 \
${GOPKG_PREFIX}/sessionwatcher1 \
${GOPKG_PREFIX}/soundeffect1 \
${GOPKG_PREFIX}/system/airplane_mode1 \
Expand All @@ -75,7 +74,6 @@ TEST = \
${GOPKG_PREFIX}/system/inputdevices1 \
${GOPKG_PREFIX}/system/keyevent1 \
${GOPKG_PREFIX}/system/lang \
${GOPKG_PREFIX}/system/power1 \
${GOPKG_PREFIX}/system/resource_ctl \
${GOPKG_PREFIX}/system/scheduler \
${GOPKG_PREFIX}/system/swapsched1 \
Expand Down Expand Up @@ -183,13 +181,16 @@ install: build install-dde-data install-icons

mkdir -pv ${DESTDIR}${PREFIX}/share/dbus-1/system.d
cp misc/conf/*.conf ${DESTDIR}${PREFIX}/share/dbus-1/system.d/
rm -f ${DESTDIR}${PREFIX}/share/dbus-1/system.d/org.deepin.dde.Power1.conf

mkdir -pv ${DESTDIR}${PREFIX}/share/dbus-1
cp -r misc/services ${DESTDIR}${PREFIX}/share/dbus-1/
cp -r misc/system-services ${DESTDIR}${PREFIX}/share/dbus-1/
rm -f ${DESTDIR}${PREFIX}/share/dbus-1/system-services/org.deepin.dde.Power1.service

mkdir -pv ${DESTDIR}${PREFIX}/share/polkit-1/actions
cp misc/polkit-action/*.policy ${DESTDIR}${PREFIX}/share/polkit-1/actions/
rm -f ${DESTDIR}${PREFIX}/share/polkit-1/actions/org.deepin.dde.power.policy

mkdir -pv ${DESTDIR}${PREFIX}/share/polkit-1/rules.d/
cp misc/polkit-rules/*.rules ${DESTDIR}${PREFIX}/share/polkit-1/rules.d/
Expand Down Expand Up @@ -227,6 +228,7 @@ install: build install-dde-data install-icons

mkdir -pv ${DESTDIR}${PREFIX}/share/dsg/configs/org.deepin.dde.daemon/
cp -r misc/dsg-configs/*.json ${DESTDIR}${PREFIX}/share/dsg/configs/org.deepin.dde.daemon/
rm -f ${DESTDIR}${PREFIX}/share/dsg/configs/org.deepin.dde.daemon/org.deepin.dde.daemon.power.json

mkdir -pv ${DESTDIR}${PREFIX}/share/dsg/configs/org.deepin.dde.lightdm-deepin-greeter
cp -r misc/dsg-configs/org.deepin.dde.lightdm-deepin-greeter/*.json ${DESTDIR}${PREFIX}/share/dsg/configs/org.deepin.dde.lightdm-deepin-greeter/
Expand Down
1 change: 0 additions & 1 deletion bin/dde-session-daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,6 @@ func (s *SessionDaemon) initModules() {
"audio",
"screensaver",
"sessionwatcher",
"power", // need screensaver and sessionwatcher
"service-trigger",
"clipboard",
"inputdevices",
Expand Down
2 changes: 1 addition & 1 deletion bin/dde-session-daemon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ var logger = log.NewLogger("daemon/dde-session-daemon")
var hasDDECookie bool
var hasTreeLand bool

var treeLandNotAllowModules = []string{"x-event-monitor", "screensaver", "display", "xsettings", "power"}
var treeLandNotAllowModules = []string{"x-event-monitor", "screensaver", "display", "xsettings"}

func isInShutdown() bool {
bus, err := dbus.SystemBus()
Expand Down
1 change: 0 additions & 1 deletion bin/dde-session-daemon/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
_ "github.com/linuxdeepin/dde-daemon/screensaver1"
_ "github.com/linuxdeepin/dde-daemon/service_trigger"
_ "github.com/linuxdeepin/dde-daemon/session/eventlog"
_ "github.com/linuxdeepin/dde-daemon/session/power1"
_ "github.com/linuxdeepin/dde-daemon/sessionwatcher1"
_ "github.com/linuxdeepin/dde-daemon/systeminfo1"
_ "github.com/linuxdeepin/dde-daemon/timedate1"
Expand Down
10 changes: 0 additions & 10 deletions bin/dde-system-daemon/exported_methods_auto.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions bin/dde-system-daemon/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package main

import (
"os"
"sync"

configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager"

Expand All @@ -23,7 +22,6 @@ import (
_ "github.com/linuxdeepin/dde-daemon/system/inputdevices1"
_ "github.com/linuxdeepin/dde-daemon/system/keyevent1"
_ "github.com/linuxdeepin/dde-daemon/system/lang"
_ "github.com/linuxdeepin/dde-daemon/system/power1"
_ "github.com/linuxdeepin/dde-daemon/system/resource_ctl"
_ "github.com/linuxdeepin/dde-daemon/system/scheduler"
_ "github.com/linuxdeepin/dde-daemon/system/swapsched1"
Expand All @@ -35,7 +33,6 @@ import (
"github.com/linuxdeepin/dde-daemon/loader"
"github.com/linuxdeepin/dde-daemon/securityloader"
login1 "github.com/linuxdeepin/go-dbus-factory/system/org.freedesktop.login1"
glib "github.com/linuxdeepin/go-gir/glib-2.0"
"github.com/linuxdeepin/go-lib/dbusutil"
. "github.com/linuxdeepin/go-lib/gettext"
"github.com/linuxdeepin/go-lib/log"
Expand All @@ -44,16 +41,13 @@ import (
//go:generate dbusutil-gen em -type Daemon

type Daemon struct {
loginManager login1.Manager
systemSigLoop *dbusutil.SignalLoop
service *dbusutil.Service
systemd systemd1.Manager
dsSystem configManager.Manager
allowCallers *securityloader.AllowCallerRegistry
idleStateMu sync.Mutex
idleStatePath string
idleScreenStatePath string
signals *struct { // nolint
loginManager login1.Manager
systemSigLoop *dbusutil.SignalLoop
service *dbusutil.Service
systemd systemd1.Manager
dsSystem configManager.Manager
allowCallers *securityloader.AllowCallerRegistry
signals *struct { // nolint
HandleForSleep struct {
start bool
}
Expand Down Expand Up @@ -120,15 +114,12 @@ func main() {
logger.SetRestartCommand("/usr/lib/deepin-daemon/dde-system-daemon")

_daemon = &Daemon{
loginManager: login1.NewManager(service.Conn()),
service: service,
systemSigLoop: dbusutil.NewSignalLoop(service.Conn(), 10),
systemd: systemd1.NewManager(service.Conn()),
allowCallers: allowCallers,
idleStatePath: IdleFile,
idleScreenStatePath: IdleScreenFile,
loginManager: login1.NewManager(service.Conn()),
service: service,
systemSigLoop: dbusutil.NewSignalLoop(service.Conn(), 10),
systemd: systemd1.NewManager(service.Conn()),
allowCallers: allowCallers,
}
_daemon.getDsgValue()
_daemon.service = service
_daemon.initSystemDaemonDConfig()
err = service.Export(dbusPath, _daemon)
Expand All @@ -146,8 +137,6 @@ func main() {
loader.StartAll()
defer loader.StopAll()

// NOTE: system/power module requires glib loop
go glib.StartLoop()
_daemon.systemSigLoop.Start()
err = _daemon.forwardPrepareForSleepSignal(service)
if err != nil {
Expand Down
200 changes: 0 additions & 200 deletions bin/dde-system-daemon/power.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,88 +5,13 @@
package main

import (
"errors"
"fmt"
"os"
"os/exec"
"strconv"
"strings"
"syscall"

"github.com/godbus/dbus/v5"
"github.com/linuxdeepin/dde-daemon/loader"
"github.com/linuxdeepin/dde-daemon/securityloader"
configManager "github.com/linuxdeepin/go-dbus-factory/org.desktopspec.ConfigManager"

"github.com/linuxdeepin/go-lib/dbusutil"
"github.com/linuxdeepin/go-lib/utils"
)

const (
IdleFile = "/sys/devices/system/loongarch/relax_state"
IdleScreenFile = "/sys/devices/system/loongarch/idle_state"
)

const (
dsettingsPowerName = "org.deepin.dde.daemon.power"
dsettingsIdleStatePath = "idleStatePath"
dsettingsIdleScreenStatePath = "idleScreenStatePath"
)

func isStrInList(item string, items []string) bool {
for _, v := range items {
if item == v {
return true
}
}
return false
}

func (d *Daemon) getDsgValue() {
ds := configManager.NewConfigManager(d.systemSigLoop.Conn())

powerPath, err := ds.AcquireManager(0, dsettingsSystemDaemonID, dsettingsPowerName, "")
if err != nil {
logger.Warning(err)
return
}

dsPower, err := configManager.NewManager(d.systemSigLoop.Conn(), powerPath)
if err != nil {
logger.Warning(err)
return
}

keyList, err := dsPower.KeyList().Get(0)
if err != nil {
logger.Warning(err)
}

if isStrInList(dsettingsIdleStatePath, keyList) {
v, err := dsPower.Value(0, dsettingsIdleStatePath)
if err != nil {
logger.Warning(err)
} else {
if dsgIdleStatePath, ok := v.Value().(string); ok {
d.idleStatePath = dsgIdleStatePath
logger.Info("idleStatePath : ", d.idleStatePath)
}
}
}

if isStrInList(dsettingsIdleScreenStatePath, keyList) {
v, err := dsPower.Value(0, dsettingsIdleScreenStatePath)
if err != nil {
logger.Warning(err)
} else {
if dsgIdleScreenStatePath, ok := v.Value().(string); ok {
d.idleScreenStatePath = dsgIdleScreenStatePath
logger.Info("idleScreenStatePath : ", d.idleScreenStatePath)
}
}
}
}

// TODO: 临时方案,hwe一些机型内核wifi有问题,需要停止wifip2p扫描,待内核修改后去掉
func stopNetworkDisaplay() {
err := exec.Command("killall", "deepin-network-display-daemon").Run()
Expand Down Expand Up @@ -117,131 +42,6 @@ func (d *Daemon) forwardPrepareForSleepSignal(service *dbusutil.Service) error {
return nil
}

type shortIdleController interface {
ShortIdleState() (bool, error)
SetShortIdleState(bool) error
}

func getShortIdleController() (shortIdleController, error) {
module := loader.GetModule("power")
if module == nil {
return nil, errors.New("power module is not registered")
}
if !module.IsEnable() {
return nil, errors.New("power module is not enabled")
}
controller, ok := module.(shortIdleController)
if !ok {
return nil, errors.New("power module does not support short idle control")
}
return controller, nil
}

func systemPowerSetShortIdleState(controller shortIdleController, state bool) error {
logger.Info("systemPowerSetShortIdleState : ", state)
if err := controller.SetShortIdleState(state); err != nil {
return fmt.Errorf("failed to set short idle mode: %w", err)
}
return nil
}

// 1.设置 system/power 模块的短 idle 状态
// 2.写file内核文件
func (d *Daemon) setState(file string, state bool) error {
if file != d.idleStatePath {
return d.writeStateFile(file, state)
}

controller, err := getShortIdleController()
if err != nil {
return fmt.Errorf("failed to get short idle controller: %w", err)
}
return d.setStateWithController(controller, file, state)
}

func (d *Daemon) setStateWithController(controller shortIdleController, file string, state bool) error {
d.idleStateMu.Lock()
defer d.idleStateMu.Unlock()

shortIdleState, err := controller.ShortIdleState()
if err != nil {
return fmt.Errorf("failed to get short idle state: %w", err)
}
logger.Infof("##### setState shortIdleState : %v, state : %v", shortIdleState, state)
if shortIdleState == state {
logger.Info("shortIdleState is same with state : ", state)
return d.writeStateFile(file, state)
}
// 设置 system/power 模块的短 idle 状态
if err := systemPowerSetShortIdleState(controller, state); err != nil {
return err
}
return d.writeStateFile(file, state)
}

func (d *Daemon) writeStateFile(file string, state bool) error {
// 写file内核文件
if !utils.IsFileExist(file) {
err := fmt.Errorf("%s not found", file)
logger.Warning(err)
return err
}

// 读取file文件内容
content, err := os.ReadFile(file)
if err != nil {
logger.Errorf("Failed to read file %s: %v", file, err)
return err
}
contentStr := strings.TrimSpace(string(content))

// 如果不一致,将state的值写入file
// 将true转换为1,false转换为0
newValue := 0
if state {
newValue = 1
}
logger.Infof("Current content=%s, will set %v", contentStr, newValue)
// 将值写入文件
newContent := strconv.Itoa(newValue)
err = os.WriteFile(file, []byte(newContent), 0644)
if err != nil {
logger.Errorf("Failed to write file %s: %v", file, err)
return err
}
syscall.Sync()
logger.Infof("Successfully updated %s with value: %d", file, newValue)
return nil
}

func (d *Daemon) SetAllowCaller(sender dbus.Sender, uniqueName string) *dbus.Error {
return dbusutil.ToError(d.allowCallers.AddCaller(securityloader.DaemonScope, sender, uniqueName))
}

func (d *Daemon) authorize(sender dbus.Sender, actionID string) error {
return securityloader.AuthorizeWithPolkit(
d.allowCallers,
securityloader.DaemonScope,
sender,
d.service.Conn(),
actionID,
)
}

func (d *Daemon) SetIdleState(sender dbus.Sender, state bool) *dbus.Error {
if err := d.authorize(sender, "org.deepin.dde.daemon.set-idle-state"); err != nil {
logger.Warningf("SetIdleState authorization failed: %q", err.Error())
return dbusutil.ToError(err)
}
logger.Infof("SetIdleState %s try set state: %v", d.idleStatePath, state)
return dbusutil.ToError(d.setState(d.idleStatePath, state))
}

func (d *Daemon) SetScreenState(sender dbus.Sender, state bool) *dbus.Error {
if err := d.authorize(sender, "org.deepin.dde.daemon.set-screen-state"); err != nil {
logger.Warningf("SetScreenState authorization failed: %q", err.Error())
return dbusutil.ToError(err)
}
logger.Infof("SetScreenState %s try set state: %v", d.idleScreenStatePath, state)
return dbusutil.ToError(d.setState(d.idleScreenStatePath, state))
}
Loading
Loading