带有 TightVnc 和 Windows Linux 子系统的默认 Ubuntu 桌面

带有 TightVnc 和 Windows Linux 子系统的默认 Ubuntu 桌面

我已在 Windows 10 计算机上成功安装了 WLS ( ubuntu 18)。我想使用 访问其 UI 功能TightVnc。使用默认设置,.vnc/xstartup包含以下行

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

我可以使用 Windows 中的 Tight vnc viewer 连接到它,但用户界面看起来像 在此处输入图片描述 但是,我想使用 Ubuntu 18 自带的默认桌面。我安装并将文件gnome更改xstartup为以下内容(网上有人建议)

#!/bin/sh

#Uncommment this line if using Gnome and your keyboard mappings are incorrect.
#export XKL_XMODMAP_DISABLE=1

# Load X resources (if any)
if [ -r "$HOME/.Xresources" ]
then
        xrdb "$HOME/.Xresources"
fi

gnome-session --disable-acceleration-check --session=ubuntu &

但是当我vncserver在进行这些更改后启动时,我能够连接,但它显示灰色屏幕,没有视觉控件,例如 在此处输入图片描述 请注意,我的机器上没有.Xresources文件,所以我手动创建了一个空文件,但这没什么区别。以下是ls /usr/share/xsessions

ubuntu-communitheme-snap.desktop  ubuntu.desktop  xfce.desktop

我发现.vnc/CS-63341DT:5.log文件中存在一些错误。以下是该文件的内容

05/04/19 12:49:17 Xvnc version TightVNC-1.3.10
05/04/19 12:49:17 Copyright (C) 2000-2009 TightVNC Group
05/04/19 12:49:17 Copyright (C) 1999 AT&T Laboratories Cambridge
05/04/19 12:49:17 All Rights Reserved.
05/04/19 12:49:17 See http://www.tightvnc.com/ for information on TightVNC
05/04/19 12:49:17 Desktop name 'X' (CS-63341DT:5)
05/04/19 12:49:17 Protocol versions supported: 3.3, 3.7, 3.8, 3.7t, 3.8t
05/04/19 12:49:17 Listening for VNC connections on TCP port 5905
Font directory '/usr/share/fonts/X11/75dpi/' not found - ignoring
Font directory '/usr/share/fonts/X11/100dpi/' not found - ignoring
gnome-session-binary[1645]: WARNING: Using null backend for session tracking
_IceTransmkdir: Owner of /tmp/.ICE-unix should be set to root
GNOME_KEYRING_CONTROL=/home/adeel/.cache/keyring-FKBRZZ
GNOME_KEYRING_CONTROL=/home/adeel/.cache/keyring-FKBRZZ
GNOME_KEYRING_CONTROL=/home/adeel/.cache/keyring-FKBRZZ
SSH_AUTH_SOCK=/home/adeel/.cache/keyring-FKBRZZ/ssh
Window manager warning: Unsupported session type
gnome-session-binary[1645]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
Window manager warning: Unsupported session type
gnome-session-binary[1645]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
gnome-session-binary[1645]: WARNING: App 'org.gnome.Shell.desktop' respawning too quickly
gnome-session-binary[1645]: CRITICAL: We failed, but the fail whale is dead. Sorry....

我该怎么做才能使默认的 ubuntu 18 桌面与 Windows 中的 TightVnc 查看器一起工作?

答案1

据微软称,WSL 仅针对想要运行 Linux 终端实用程序的开发人员而设计。类似的问题。

据报道,您可以通过以下方式获得成功的结果

1)安装 Xserver,例如西明或者VcXsrv。

apt-get2)通过或安装你希望在 WSL 下运行的图形软件apt

3)使用以下方法导出显示环境变量export DISPLAY=:0 每次您想要运行图形应用程序时。

4)通过输入可执行文件的名称来启动图形应用程序

笔记: 该子系统(WSL)无法运行所有 Linux 软件,例如 32 位二进制文​​件,或需要 WSL 中未实现的特定 Linux 内核服务的软件。

通过在 Windows(主机)环境中安装 X11 服务器(例如 VcXsrv 或 Xming),可以运行一些图形(GUI)应用程序(例如 Mozilla Firefox),如上所述,但并非没有警告,例如缺乏音频支持或硬件加速(导致图形性能不佳)。目前还没有实现对 OpenCL 和 CUDA 的支持,尽管可能会在未来的版本中实现。

在我看来,这个练习的工作量比它的价值要大。最终结果是图形性能不佳和 I/O 瓶颈。最好简单地在虚拟机上运行 Ubuntu或者双启动而不是处理应用程序所需的 Linux 系统调用可能未完全受 Windows Subsystem for Linux 的支持。

资料来源:

截至 2018 年,在 Windows Subsystem for Linux 上运行 GUI 应用程序的最简单方法是什么?

如何在预装了 UEFI 的 Windows 的同时安装 Ubuntu?

https://www.howtogeek.com/261575/how-to-run-graphical-linux-desktop-applications-from-windows-10s-bash-shell/

https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux

https://blogs.msdn.microsoft.com/wsl/2016/06/08/wsl-system-calls/

答案2

我用虚拟主机因为它是免费的,而且经常更新。请看我的回答:

重要的是安装它并接受默认设置,然后(对我来说)编辑/etc/environment和更改它:

PATH="/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:"

更改为:

PATH="/mnt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export LIBGL_ALWAYS_INDIRECT=Yes
export DISPLAY=localhost:0.0
  • /mnt/e/bin:在路径开头添加仅对于存储在 NTFS 分区上的共享脚本很重要,Ubuntu 本机运行该脚本,而 WSL Bash 也运行该脚本。
  • 导出LIBGGL...对于 GUI 正确绘制很重要
  • 导出DISPLAY...对于 X-Server 正常运行很重要 然后我可以将yadzenity用于所有 GUI 脚本。

答案3

在此处输入图片描述 以下说明是从我写的一篇文章中复制粘贴的,但丢失了原始格式、链接和屏幕截图:

来源: 如何在 WSL2 中安装带有图形用户界面的 Ubuntu 桌面


下载VcXsrv:访问官方网站点击“下载”


安装 VcXsrv:打开“vcxsrv-64.1.20.8.1.installer.exe”单击“下一步”单击“安装”单击“关闭”


允许访问 VcXsrv:选中“专用网络”,单击“允许访问”


打开 PowerShell:按“⊞ Windows”在搜索栏中输入“PowerShell”右键单击“Windows PowerShell”单击“以管理员身份运行”


打开 WSL2:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

wsl


安装 Ubuntu 桌面:复制下面的命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt --yes install ubuntu-desktop


设置用户名变量:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

username=$(wslvar USERNAME)


创建 Ubuntu 目录:复制以下说明中的命令,将命令粘贴到 PowerShell 中,按“Enter”

mkdir --parents /mnt/c/users/$username/.ubuntu/


打开 Ubuntu 目录:复制下面的命令,将命令粘贴到 PowerShell 中,按“Enter”

cd /mnt/c/users/$username/.ubuntu


下载 Microsoft 产品的 Linux 软件存储库:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

Ubuntu 20.04: wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb --output-document packages-microsoft-prod.deb Ubuntu 18.04: wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb --output-document packages-microsoft-prod.deb


为 Microsoft 产品安装 Linux 软件存储库:复制以下说明中的命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo dpkg --install packages-microsoft-prod.deb


更新存储库:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt update


安装用于 HTTPS 的 APT Transport:从以下说明中复制命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt install --yes apt-transport-https


更新存储库:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt update


安装 .Net:复制以下说明中的命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt install --yes dotnet-sdk-5.0


将 Arkane Systems 添加到源列表目录:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo sh -c 'echo "deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /" > /etc/apt/sources.list.d/wsl-translinux.list'


更新存储库:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt update


安装 Genie:复制以下说明中的命令,将命令粘贴到 PowerShell 中,按“Enter”

sudo apt install --yes systemd-genie


创建 Sudoers 文件:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/genie" | sudo EDITOR="tee" visudo --file /etc/sudoers.d/$USER


创建桌面脚本:从以下说明复制代码,将代码粘贴到 PowerShell 中,按“Enter”


# CREATE BASH SCRIPT

# Store block of text with here document
create_bash_script=$(cat << end_of_string

# Define necessary environment variables
export DISPLAY="\$(cat /etc/resolv.conf | grep nameserver | awk '{ print \$2 }'):1.0"
export DESKTOP_SESSION="ubuntu"
export GDMSESSION="ubuntu"
export XDG_SESSION_DESKTOP="ubuntu"
export XDG_CURRENT_DESKTOP="ubuntu:GNOME"
export XDG_SESSION_TYPE="x11"
export XDG_BACKEND="x11"
export XDG_SESSION_CLASS="user"
export XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/var/lib/snapd/desktop"
export XDG_CONFIG_DIRS="/etc/xdg"
export XDG_RUNTIME_DIR="\$HOME/xdg"
export XDG_CONFIG_HOME="\$HOME/.config"
export XDG_DATA_HOME="\$HOME/.local/share" 
export XDG_CACHE_HOME="\$HOME/.cache"
export XDG_DESKTOP_DIR="\$HOME/Desktop"
export XDG_DOCUMENTS_DIR="\$HOME/Documents"
export XDG_DOWNLOAD_DIR="\$HOME/Downloads"
export XDG_MUSIC_DIR="\$HOME/Music"
export XDG_PICTURES_DIR="\$HOME/Pictures"
export XDG_PUBLICSHARE_DIR="\$HOME/Public"
export XDG_TEMPLATES_DIR="\$HOME/Templates"
export XDG_VIDEOS_DIR="\$HOME/Videos"

# Start desktop environment
gnome-session

end_of_string
)

# Store username environment variable in lowercase
username=$(wslvar USERNAME | awk '{ print tolower($0) }') &&

# Save block of text in bash file
echo "${create_bash_script}" > "/mnt/c/users/$username/.ubuntu/02_start_desktop.sh"


下载快捷方式图像:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

wget https://assets.ubuntu.com/v1/9fbc8a44-circle-of-friends-web.zip


解压快捷方式图像:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

unzip -o 9fbc8a44-circle-of-friends-web.zip


创建快捷方式图标:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

convert -resize 64x64 ./circle-of-friends-web/png/cof_orange_hex.png ubuntu.ico


退出 WSL2:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

exit


创建 VcXsrv 脚本:从以下说明复制代码,将代码粘贴到 PowerShell 中,按“Enter”


# RELOAD VCXSRV SCRIPT

# Store username environment variable in lowercase
$username = $env:username.tolower()  

# Store block of text with here-string
$reload_vcxsrv_script = @"

# Stop vcxsrv proccess that contains "1.0" in the program window title
get-process vcxsrv | where { `$_.mainwindowtitle -like "*1.0*" } | stop-process

# Start vcxsrv process in a large program window on display number one
start-process "c:\program files\vcxsrv\vcxsrv.exe" -argument ":1 -ac -nowgl -multimonitors -dpms"

"@

# Save block of text in powershell file
echo "${reload_vcxsrv_script}" > $env:userprofile/.ubuntu/reload_vcxsrv.ps1


创建 Ubuntu 脚本:从以下说明复制代码,将代码粘贴到 PowerShell 中,按“Enter”


# CREATE VISUAL BASIC SCRIPT

# Store username environment variable in lowercase
$username = $env:username.tolower()           

# Store block of text with here-string
$create_vbs_script = @"

' Run PowerShell script in background
set application = createobject("shell.application")
application.shellexecute "powershell", "-file c:\users\admin\.ubuntu\01_reload_vcxsrv.ps1", "", "", 0

' Allow PowerShell script to complete
wscript.sleep 3000

' Run Bash script in background
set shell= createobject("wscript.shell")
shell.run "wsl sudo genie -c bash /mnt/c/users/admin/.ubuntu/02_start_desktop.sh", 0

"@

# Save block of text in bash file
echo "${create_vbs_script}" > $env:userprofile/.ubuntu/03_start_ubuntu.vbs


创建快捷方式脚本:从以下说明复制代码,将代码粘贴到 PowerShell 中,按“Enter”


# Store block of text with here-string
$create_shortcut_script = @"

# Define location variables
`$shortcut_location = "`$env:userprofile\.ubuntu\Ubuntu.lnk"
`$program_location = "`$env:userprofile\.ubuntu\03_start_ubuntu.vbs"

# Create shortcut
`$object = new-object -comobject wscript.shell
`$shortcut = `$object.createshortcut(`$shortcut_location)
`$shortcut.targetpath = `$program_location
`$shortcut.iconlocation = "`$env:userprofile\.ubuntu\ubuntu.ico"
`$shortcut.save()

"@

# Save block of text in powershell file
echo $create_shortcut_script > $env:userprofile/.ubuntu/04_create_shortcut.ps1


打开 Ubuntu 目录:复制下面的命令,将命令粘贴到 PowerShell 中,按“Enter”

cd c:\users\admin\.ubuntu


创建快捷方式:从以下说明复制命令,将命令粘贴到 PowerShell 中,按“Enter”

powershell.exe -file .\04_create_shortcut.ps1


在资源管理器中打开目录:从以下说明复制命令,将命令粘贴到 PowerShell 中按“Enter”

explorer .


启动 Ubuntu 桌面:双击“Ubuntu”快捷方式


打开终端:点击左上角的“活动” 在搜索栏中输入“终端” 点击“终端”


禁用屏幕锁:复制以下说明中的命令,将命令粘贴到终端中按“Enter”

gsettings set org.gnome.desktop.screensaver lock-enabled false


安装 Snap Store:复制以下说明中的命令,将命令粘贴到终端中,按“Enter”

sudo snap install snap-store


相关内容