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

相关推荐
tang74516396214 小时前
华为云服务器Ubuntu 24.04 安装 Kafka20260318
服务器·ubuntu·华为云
全球通史15 小时前
Jetson Nano 双摄像头芯片检测视觉系统:小尺度难定位问题解决,从零开始实现教程说明
嵌入式硬件·算法·ubuntu·性能优化
又熟了1 天前
乌班图Ubuntu安装
linux·运维·ubuntu
peixiuhui1 天前
RK3506 ubuntu22.04系统编译
ubuntu·开发板·核心板·工控机·ubuntu22.04·瑞芯微·rk3506
padane221 天前
gmssl编译wasm
ubuntu·html·密码学·wasm·js
reikocao1 天前
ubuntu系统源
linux·运维·ubuntu
Sisphusssss1 天前
DiskGenius 备份 Ubuntu 系统
linux·ubuntu·diskgenius
城南观北1 天前
Ubuntu 解决 apt 锁占用 + 安装 net-tools + 搭建 SSH 远程连接(保姆级实操)
linux·ubuntu·ssh
Rain5091 天前
05. mini-cc 工具系统:让 AI 拥有动手能力
linux·前端·人工智能·ubuntu·typescript·ai编程