Ubuntu26.04 使用 nomachine 9.5.7 时黑屏,及使用 Rustdesk 时必须选择分享屏幕 的解决

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

直接sudo xxx.sh 执行即可,回退的话 sudo xxx.sh --undo

相关推荐
千河殇 多想和她18 小时前
如何在Reaonix中使用CodeGraph以及CodeGraph效果实测经验分享
linux·运维·ubuntu
诸葛老刘20 小时前
Ubuntu 服务器常用运维命令
运维·服务器·ubuntu
阡陌..1 天前
Ubuntu 22.04 离线环境完全配置指南:从 GCC 到 NVIDIA 驱动再到 Samba 共享
linux·运维·ubuntu
feasibility.2 天前
wsl安装Ubuntu方法(含网络不稳定处理)
linux·运维·windows·ubuntu
程序员允诺2 天前
Ubuntu 安装 Docker CE 和 Docker Compose 最新教程(2026)
ubuntu·docker·eureka
风华同学2 天前
【环境搭建篇】VMware Fusion虚拟机安装Ubuntu 26.04
linux·运维·ubuntu
半句唐诗2 天前
Ubuntu 更新 JS 环境记录
linux·javascript·ubuntu
晚风吹长发2 天前
Docker基础——Docker Network(网络详解)
linux·运维·网络·ubuntu·docker·容器
Sisphusssss2 天前
香橙派5plus GPIO
linux·python·ubuntu
半句唐诗3 天前
Ubuntu 离线安装 OpenSpec CLI、CodeGraph CLI 与相关工具实战笔记
ubuntu·arcgis