Ubuntu26.04 使用 nomachine 9.5.7 时黑屏,及使用 Rustdesk 时必须选择分享屏幕 的解决
shell
#!/usr/bin/env bash
set -euo pipefail
GDM_CONF="/etc/gdm3/custom.conf"
BACKUP_CONF="/etc/gdm3/custom.conf.rustdesk-xorg-backup"
XSESSION_DIR="/usr/share/xsessions"
XSESSION_FILE="${XSESSION_DIR}/ubuntu-xorg.desktop"
MANAGED_MARKER="# Managed by fix-rustdesk-share-screen.sh"
usage() {
cat <<'EOF'
Usage:
fix-rustdesk-share-screen.sh Apply Xorg/RustDesk fix and restart gdm3
fix-rustdesk-share-screen.sh --undo Restore previous config and restart gdm3
fix-rustdesk-share-screen.sh --help Show this help
Warning:
Restarting gdm3 will immediately disconnect the current graphical session.
EOF
}
require_root() {
if [[ "${EUID}" -ne 0 ]]; then
echo "Please run with sudo:"
echo " sudo $0 $*"
exit 1
fi
}
apply_fix() {
require_root "$@"
if [[ ! -f "${GDM_CONF}" ]]; then
echo "Missing ${GDM_CONF}; this script expects Ubuntu GNOME with gdm3."
exit 1
fi
if [[ ! -f "${BACKUP_CONF}" ]]; then
cp -a "${GDM_CONF}" "${BACKUP_CONF}"
echo "Backup created: ${BACKUP_CONF}"
else
echo "Backup already exists: ${BACKUP_CONF}"
fi
sed -i '/^[#[:space:]]*WaylandEnable=/d' "${GDM_CONF}"
if grep -q '^\[daemon\]' "${GDM_CONF}"; then
sed -i "/^\[daemon\]/a ${MANAGED_MARKER}\\nWaylandEnable=false" "${GDM_CONF}"
else
{
printf '\n[daemon]\n'
printf '%s\n' "${MANAGED_MARKER}"
printf 'WaylandEnable=false\n'
} >> "${GDM_CONF}"
fi
install -d -m 755 "${XSESSION_DIR}"
cat > "${XSESSION_FILE}" <<'EOF'
[Desktop Entry]
Name=Ubuntu on Xorg
Comment=This session logs you into Ubuntu on Xorg
Exec=/usr/bin/gnome-session --session=ubuntu
TryExec=/usr/bin/gnome-session
Type=Application
DesktopNames=ubuntu:GNOME
X-GDM-SessionRegisters=true
X-Ubuntu-Gettext-Domain=gnome-session
EOF
chmod 644 "${XSESSION_FILE}"
systemctl enable rustdesk.service
echo "Applied. Restarting gdm3 now; your graphical/remote session may disconnect."
systemctl restart gdm3
}
undo_fix() {
require_root "$@"
if [[ -f "${BACKUP_CONF}" ]]; then
cp -a "${BACKUP_CONF}" "${GDM_CONF}"
echo "Restored ${GDM_CONF} from ${BACKUP_CONF}"
else
echo "No backup found at ${BACKUP_CONF}; removing managed Wayland setting only."
sed -i "/^${MANAGED_MARKER}$/d" "${GDM_CONF}"
sed -i '/^WaylandEnable=false$/d' "${GDM_CONF}"
fi
if [[ -f "${XSESSION_FILE}" ]]; then
rm -f "${XSESSION_FILE}"
echo "Removed ${XSESSION_FILE}"
fi
echo "Undo complete. Restarting gdm3 now; your graphical/remote session may disconnect."
systemctl restart gdm3
}
case "${1:-}" in
"")
apply_fix "$@"
;;
--undo|-u)
undo_fix "$@"
;;
--help|-h)
usage
;;
*)
usage
exit 2
;;
esac