Install cosmic and deps
yay -S cosmic cosmic-session cosmic-applets cosmic-launcher cosmic-files cosmic-term cosmic-settings cosmic-workspaces cosmic-panel cosmic-comp cosmic-text cosmic-notifications cosmic-bg cosmic-calendar cosmic-screenshot cosmic-greeterThis did take a while
(some were missing, we’ll just see what happens) :shrug:
Check which display manager is being used.
sudo systemctl list-unit-files | grep display-manager
display-manager.service alias -
systemctl list-units --type=service | grep dm
sddm.service loaded active running Simple Desktop Display ManagerOK, post reboot it;‘s not working.
Looking in sessions we see this.
lsd -l /usr/share/wayland-sessions/
lsd -l /usr/share/xsessions/
.rw-r--r-- root root 146 B Wed Oct 29 06:10:48 2025 cosmic.desktop
.rw-r--r-- root root 190 B Tue Oct 14 17:00:22 2025 hyprland-uwsm.desktop
.rw-r--r-- root root 176 B Tue Oct 14 17:00:22 2025 hyprland.desktop
lsd: /usr/share/xsessions/: No such file or directory (os error 2).Added this to /etc/sddm.conf
[General]
InputMethod=
[Wayland]
SessionDir=/usr/share/wayland-sessions
[X11]
SessionDir=/usr/share/xsessions
Since I have ml4w, we need to do some other things…
# Wrapper that strips Hyprland-specific env before starting COSMIC
sudo tee /usr/local/bin/start-cosmic-plain >/dev/null <<'EOF'
#!/usr/bin/env bash
# Avoid inherited Wayland/Hyprland session vars
unset XDG_CURRENT_DESKTOP
unset XDG_SESSION_TYPE
unset WAYLAND_DISPLAY
unset HYPRLAND_INSTANCE_SIGNATURE
exec /usr/bin/start-cosmic
EOF
sudo chmod +x /usr/local/bin/start-cosmic-plain
sudo tee /usr/share/wayland-sessions/cosmic-ml4w.desktop >/dev/null <<'EOF'
[Desktop Entry]
Name=COSMIC (Wayland, ML4W-safe)
Comment=The COSMIC desktop environment via a clean session wrapper
Exec=/usr/local/bin/start-cosmic-plain
Type=Application
DesktopNames=cosmic
EOFDisable things
systemctl --user disable --now hypridle.service 2>/dev/null
systemctl --user disable --now hyprpaper.service 2>/dev/null
systemctl --user disable --now hyprpolkit-agent.service 2>/dev/null
systemctl --user disable --now hyprlock.service 2>/dev/null
systemctl --user disable --now waybar.service 2>/dev/null
systemctl --user disable --now xdg-desktop-portal-hyprland.service 2>/dev/nullAnd make them start only for hyprland
systemctl --user add-wants hyprland-session.target hypridle.service 2>/dev/null
systemctl --user add-wants hyprland-session.target hyprpaper.service 2>/dev/null
systemctl --user add-wants hyprland-session.target hyprpolkit-agent.service 2>/dev/null
systemctl --user add-wants hyprland-session.target hyprlock.service 2>/dev/null
systemctl --user add-wants hyprland-session.target waybar.service 2>/dev/null
systemctl --user add-wants hyprland-session.target xdg-desktop-portal-hyprland.service 2>/dev/nullStart cosmic and cosmic only
systemctl --user enable cosmic-session.target 2>/dev/null || true
Fix SDM gears again
sudo mkdir -p /usr/share/xsessions
sudo install -d /etc/sddm.conf.d
sudo tee /etc/sddm.conf.d/10-session-dirs.conf >/dev/null <<'EOF'
[Wayland]
SessionDir=/usr/share/wayland-sessions
[X11]
SessionDir=/usr/share/xsessions
EOF
# Clear any odd cache and bounce SDDM
sudo rm -rf /var/lib/sddm/.cache/* 2>/dev/null
sudo systemctl restart sddm
To try this again..
sudo systemctl restart sddm
Ensure Hyperlock doesn’t start things
systemctl --user disable --now hyprlock.service 2>/dev/null
systemctl --user disable --now hypridle.service 2>/dev/null
systemctl --user disable --now hyprpaper.service 2>/dev/null
systemctl --user disable --now waybar.service 2>/dev/null
systemctl --user disable --now xdg-desktop-portal-hyprland.service 2>/dev/null
# bind them to Hyprland session only (safe if they don’t exist)
systemctl --user add-wants hyprland-session.target hyprlock.service 2>/dev/null
systemctl --user add-wants hyprland-session.target hypridle.service 2>/dev/null
systemctl --user add-wants hyprland-session.target hyprpaper.service 2>/dev/null
systemctl --user add-wants hyprland-session.target waybar.service 2>/dev/null
systemctl --user add-wants hyprland-session.target xdg-desktop-portal-hyprland.service 2>/dev/null
Remove hyprland autostarts
sudo mkdir -p /usr/share/xsessions
sudo install -d /etc/sddm.conf.d
sudo tee /etc/sddm.conf.d/10-session-dirs.conf >/dev/null <<'EOF'
[Wayland]
SessionDir=/usr/share/wayland-sessions
[X11]
SessionDir=/usr/share/xsessions
EOF
sudo rm -rf /var/lib/sddm/.cache/* 2>/dev/null
Add cosmic desktop session
# verify binary exists
command -v cosmic-session || echo "cosmic-session not found"
# update the session descriptor to call it directly
sudo tee /usr/share/wayland-sessions/cosmic.desktop >/dev/null <<'EOF'
[Desktop Entry]
Name=COSMIC (Wayland)
Comment=The COSMIC desktop environment
Exec=/usr/bin/cosmic-session
Type=Application
DesktopNames=cosmic
EOF
Rollback (quick)
-
Remove the ML4W-safe session:
sudo rm -f /usr/share/wayland-sessions/cosmic-ml4w.desktop /usr/local/bin/start-cosmic-plain -
Re-enable Hyprland helpers globally (if you want):
systemctl --user enable --now hypridle.service hyprpaper.service hyprpolkit-agent.service hyprlock.service waybar.service
If any unit names don’t match (ML4W sometimes prefixes them), paste:
systemctl --user list-unit-files | grep -i hypr
and I’ll give you the exact add-wants lines for your setup.
🧩 (Optional) Set COSMIC as default session
If you want SDDM to always start COSMIC automatically:
sudo mkdir -p /usr/share/xsessions /usr/share/wayland-sessions sudo cp /usr/share/wayland-sessions/cosmic.desktop /usr/share/wayland-sessions/default.desktop
Or edit:
sudo nano /etc/sddm.conf
and set:
[Autologin] Session=cosmic
Would you like me to show how to make COSMIC the default (so SDDM always logs into it without selecting it manually)?