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

相关推荐
明月不会写代码8 小时前
Ubuntu 下 Kitty 终端配置记录
linux·ubuntu
weipt8 小时前
利用wsl给windows电脑上安装一个ubuntu
linux·运维·ubuntu
阿钱真强道8 小时前
01 嵌入式操作系统 | 课程导论与虚拟机安装 Ubuntu
linux·ubuntu·嵌入式·虚拟机
IT菜鸟程11 小时前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
Mr-Apple12 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl
自律最差的编程狗14 小时前
Ubuntu下Docker部署Ollama 轻量模型
linux·ubuntu·docker
阿钱真强道16 小时前
04 嵌入式操作系统 | 常用命令Ⅱ:用户权限、进程与网络
linux·ubuntu·进程管理·用户权限·网络排查
阿钱真强道16 小时前
03 嵌入式操作系统 | 常用命令Ⅰ:文件、查找与压缩
linux·ubuntu·文件管理·命令行·压缩解压
事圆则缓1 天前
Ubuntu 安装与配置 Samba 服务器
linux·服务器·ubuntu
乌恩大侠1 天前
【Sionna】docker build ubuntu cuda
ubuntu·docker·容器·spark·o-ru·ai-ran