Skip to content

Commit

Permalink
chore: use systemd start
Browse files Browse the repository at this point in the history
start dde components

Log:
  • Loading branch information
justforlxz committed Jan 16, 2024
1 parent 79b33d2 commit 7649d52
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 20 deletions.
1 change: 1 addition & 0 deletions data/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ if(BUILD_MAN_PAGES)
endif()
add_subdirectory(themes)
add_subdirectory(translations)
add_subdirectory(systemd)
28 changes: 28 additions & 0 deletions data/systemd/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
macro(install_symlink filepath wantsdir)
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/link/${wantsdir}/)
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_INSTALL_PREFIX}/lib/systemd/user/${filepath} ${PROJECT_BINARY_DIR}/link/${wantsdir}/${filepath})
install(FILES ${PROJECT_BINARY_DIR}/link/${wantsdir}/${filepath} DESTINATION lib/systemd/user/${wantsdir}/)
endmacro(install_symlink)

set(SERVICES
dde-fake-session-initialized.target
dde-fake-session.target
)
install(FILES ${SERVICES} DESTINATION lib/systemd/user/)

install(DIRECTORY DESTINATION lib/systemd/user/dde-fake-session-initialized.target.wants/)
set(DDE_SESSION_INITIALIZED_WANTS
dde-fake-session-initialized.target.wants/fake-dde-desktop.service
dde-fake-session-initialized.target.wants/fake-dde.service
dde-fake-session-initialized.target.wants/fake-dde-polkit-agent.service
dde-fake-session-initialized.target.wants/fake-dde-am.service
dde-fake-session-initialized.target.wants/fake-dde-im.service
)

install(FILES ${DDE_SESSION_PRE_WANTS} DESTINATION lib/systemd/user/)
install(FILES ${DDE_SESSION_INITIALIZED_WANTS} DESTINATION lib/systemd/user/)
install_symlink(fake-dde-desktop.service dde-fake-session-initialized.target.wants)
install_symlink(fake-dde.service dde-fake-session-initialized.target.wants)
install_symlink(fake-dde-polkit-agent.service dde-fake-session-initialized.target.wants)
install_symlink(fake-dde-am.service dde-fake-session-initialized.target.wants)
install_symlink(fake-dde-im.service dde-fake-session-initialized.target.wants)
10 changes: 10 additions & 0 deletions data/systemd/dde-fake-session-initialized.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Unit]
Description=dde-fake-session-initialized target, task to initialize the desktop environment.
OnFailureJobMode=replace-irreversibly
DefaultDependencies=no
RefuseManualStart=yes
RefuseManualStop=yes

Requisite=dde-fake-session.target
PartOf=dde-fake-session.target
Before=dde-fake-session.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[Unit]
Description=Deepin Application Manager
RefuseManualStart=no
RefuseManualStop=no
StartLimitBurst=3
CollectMode=inactive-or-failed

Requisite=dde-fake-session-initialized.target
PartOf=dde-fake-session-initialized.target
Before=dde-fake-session-initialized.target

[Service]
Type=simple
ExecStart=/usr/bin/dde-application-manager
Environment=QT_LOGGING_RULES="*.debug=false"
# turn off PrivateUser to prevent AM can't access some directory. eg. "/persistent/linglong"
PrivateUsers=false
Slice=session.slice
Restart=always
RestartSec=500ms
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[Unit]
Description=dde-desktop service
RefuseManualStart=no
RefuseManualStop=no
StartLimitBurst=3
CollectMode=inactive-or-failed

Requisite=dde-fake-session-initialized.target
PartOf=dde-fake-session-initialized.target
Before=dde-fake-session-initialized.target

Requires=dbus.socket
After=dbus.socket

[Service]
Type=simple
ExecStart=/usr/bin/dde-desktop
TimeoutStartSec=infinity
Slice=session.slice
Restart=on-failure
RestartSec=1s
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[Unit]
Description=deepin input method daemon service
RefuseManualStart=no
RefuseManualStop=no
# Limit startup frequency more than the default
StartLimitIntervalSec=15s
StartLimitBurst=3

[Service]
Type=simple
ExecStart=/usr/bin/dim
SuccessExitStatus=1
Slice=session.slice
Restart=on-failure
RestartSec=1s
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[Unit]
Description=dde-polkit-agent service
RefuseManualStart=no
RefuseManualStop=no
StartLimitBurst=3
CollectMode=inactive-or-failed

Requisite=dde-fake-session-initialized.target
PartOf=dde-fake-session-initialized.target
Before=dde-fake-session-initialized.target

[Service]
Type=simple
ExecStart=/usr/lib/polkit-1-dde/dde-polkit-agent
TimeoutStartSec=infinity
Slice=session.slice
Restart=on-failure
RestartSec=500ms
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[Unit]
Description=dde service
RefuseManualStart=no
RefuseManualStop=no
StartLimitBurst=3
CollectMode=inactive-or-failed

Requisite=dde-fake-session-initialized.target
PartOf=dde-fake-session-initialized.target
Before=dde-fake-session-initialized.target

Requires=dbus.socket
After=dbus.socket

Wants=fake-dde-am.service
After=fake-dde-am.service

[Service]
Type=simple
ExecStart=/usr/bin/dde-shell -C DDE
TimeoutStartSec=infinity
Slice=session.slice
Restart=on-failure
RestartSec=1s
9 changes: 9 additions & 0 deletions data/systemd/dde-fake-session.target
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[Unit]
Description=dde-fake-session target
DefaultDependencies=no

BindsTo=graphical-session.target
Before=graphical-session.target

Requires=dde-fake-session-initialized.target
After=dde-fake-session-initialized.target
34 changes: 14 additions & 20 deletions src/treeland/treeland-fake-session/fake-session.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -271,30 +271,24 @@ FakeSession::FakeSession(int argc, char* argv[])
});

emit m_shortcutManager->activeChanged();

QProcess::startDetached("dde-shell", {"-p", "org.deepin.ds.dock"});

QDBusInterface systemd("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager");
systemd.call("UnsetEnvironment", QStringList{"DISPLAY", "WAYLAND_DISPLAY", "XDG_SESSION_TYPE"});
systemd.call("SetEnvironment", QStringList{
QString("DISPLAY=%1").arg(qgetenv("DISPLAY")),
QString("WAYLAND_DISPLAY=%1").arg(qgetenv("WAYLAND_DISPLAY")),
QString("XDG_SESSION_TYPE=%1").arg(qgetenv("XDG_SESSION_TYPE")),
QString("XDG_CURRENT_DESKTOP=%1").arg(qgetenv("XDG_CURRENT_DESKTOP")),
}
);

if (!QProcess::startDetached("dim")) {
qDebug() << "Failed to start deepin input method";
}

if (!QProcess::startDetached("dde-application-manager")) {
qDebug() << "Filed to start deepin application manager";
}
}

int main (int argc, char *argv[]) {
FakeSession helper(argc, argv);

QTimer::singleShot(0, &helper, [&helper] {
QDBusInterface systemd("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager");
systemd.call("UnsetEnvironment", QStringList{"DISPLAY", "WAYLAND_DISPLAY", "XDG_SESSION_TYPE"});
systemd.call("SetEnvironment", QStringList{
QString("DISPLAY=%1").arg(qgetenv("DISPLAY")),
QString("WAYLAND_DISPLAY=%1").arg(qgetenv("WAYLAND_DISPLAY")),
QString("XDG_SESSION_TYPE=%1").arg(qgetenv("XDG_SESSION_TYPE")),
QString("XDG_CURRENT_DESKTOP=%1").arg(qgetenv("XDG_CURRENT_DESKTOP")),
}
);

systemd.call("StartUnit", "dde-fake-session.target", "replace");
});

return helper.exec();
}

0 comments on commit 7649d52

Please sign in to comment.