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

相关推荐
qq_371802113 天前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
且从容.4 天前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 天前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.4 天前
ubuntu安装flink
linux·ubuntu·flink
Linux-lucky4 天前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
禁默4 天前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu
skywalk81634 天前
把 去也网站 从 Ubuntu 搬到 FreeBSD:一次 Service Jail + nginx 的部署实录
linux·运维·nginx·ubuntu·freebsd
David猪大卫5 天前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
且从容.6 天前
Ubuntu 安装 Docker
linux·ubuntu·docker
承渊政道7 天前
Linux网络学习【深入理解多路转接select、poll的代码改写】
linux·ubuntu·select·多路转接·poll