草庐IT

Ubuntu Desktop 启用远程桌面(Vino和TigerVNC方式)

Naisu Xu 2023-04-11 原文

文章目录

前言

在很多领域的生产开发工作中常常需要用到 Ubuntu Desktop 系统,但是在一些日常的工作交流中又离不开Windows系统,这种时候比较常用的解决方案就是在Windows系统上使用虚拟机安装Ubuntu。不过就我个人而言并不喜欢使用虚拟机,弄个小主机无显示使用起来更加舒服。有些特定的工作需要用到 Ubuntu Desktop 桌面环境,这个时候远程桌面就是一个非常好用的功能了。

这篇文章中以 Ubuntu 20.04 进行说明测试。

使用Vino方式

Ubuntu Desktop 是自带屏幕共享(远程桌面)功能的(Vino),但有可能需要安装下才会在菜单中显示。在终端中使用下面命令进行安装设置:

sudo apt update

sudo apt install vino

gsettings set org.gnome.Vino require-encryption false

安装完成后可以在 Settings 中启用 Sharing 后看到 Screen Sharing 选项:

Screen Sharing 选项中设置密码与网络即可开启屏幕共享:


开启屏幕共享后就可以在其它电脑上使用 VNC Viewer 等工具连接到此桌面。 VNC Viewer 可以在下面地址下载:
https://www.realvnc.com/en/connect/download/viewer/
默认端口号为5900,提示未加密的连接不必用管,直接 Continue 即可:

需要注意的是如果你之前开启过SSH服务(就是使用 sudo apt install openssh-server 安装启用的那个),那么可能在上述操作后SSH服务会被关闭,注意检查下相关设置:

上面 Remote Login 那个。

无显示器使用

启用屏幕共享后主机可以在角落一直挂机了,需要用的时候远程连上用就行。但是还有个问题,通常情况下主机的HDMI、DP等数字的视频输出口外面不接显示器的话,系统启动后也不会进入图形界面,这个时候用 VNC Viewer 等工具连接显示出的也只是一片黑屏。

这个时候就需要用一些方法来欺骗设备或系统了,主要可以使用两类方式(如果用下面的TigerVNC那么也可以跳过这个章节)。

硬件虚拟显示器
最简单的就是花点钱,假装有个显示器:

软件虚拟显示器
不想花钱或是不方便使用硬件伪装的话可以尝试软件形式的虚拟显示器,主要是使用 xserver-xorg-video-dummy 这个软件,具体的使用方式可以参考下面文章:
《How to run X server using xserver-xorg-video-dummy driver on Ubuntu》
《【LINUX】(Ubuntu)无显示器接入,使用虚拟显示器且远程控制》

使用TigerVNC方式

Vino用起来很方便,但是局限性也蛮大的,相对来说TigerVNC更加好用些。Vino相对来说偏向于屏幕共享,而TigerVNC就更加偏向于远程桌面了。TigerVNC可以方便的设置远程桌面的分辨率、色彩深度等。甚至TigerVNC还可以无显示器使用(当然有显示器和没显示器界面效果是有差异的)。

TigerVNC项目主页: https://tigervnc.org/
TigerVNC项目页面: https://github.com/TigerVNC/tigervnc

# 下面是Ubuntu中TigerVNC相关的一些包,使用 VNC server 功能只需要安装没有注释掉的部分即可
sudo apt install tigervnc-common
# sudo apt install tigervnc-scraping-server
sudo apt install tigervnc-standalone-server
# sudo apt install tigervnc-viewer
# sudo apt install tigervnc-xorg-extension

安装完成后需要进行一些设置,先设置远程连接的密码

最后的选项选n。

然后配置远程连接显示的桌面

上面 xstartup 中文本针对的是 Ubuntu Desktop 20.0.4 所用的Gnome3桌面设置的,文本如下:

#!/bin/sh

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

vncconfig -iconic &

dbus-launch --exit-with-session gnome-session &

接着就可以启动vncserver了,常用的比如 vncserver -localhost no -geometry 1280x720 :1

上面 -localhost no 是必选的,这样才能被远程访问;-geometry 1280x720 用于设置远程桌面分辨率;:1 指明服务开启的会话号为1,这个可以不写,不写程序也会自动分配一个可用的号。还有一个比较有用的参数是 -depth 24 ,用来设置色彩位深,默认为24,可以设置8、16、24、32。通常来说分辨率和位深越小,远程桌面再使用时会越流畅些。

启动完成后就可以使用 VNC Viewer 等工具进行连接了,端口号为5900+会话号,刚连接上时可能色彩有问题,刷新下就好:

可以使用 vncserver -list 来查看当前启用的会话,使用 vncserver -kill :会话号 来关闭会话

关于 vncserver 的更多内容可以使用 man vncserver 或者 vncserver -h 等来查看。

最后需要注意的是: vncserver 可能并不会开机启动,可以使用SSH登陆进行手动启动,或者参考 《Linux笔记:开机自动运行程序》 进行设置。

有关Ubuntu Desktop 启用远程桌面(Vino和TigerVNC方式)的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 正确的 Rails 2.1 做事方式 - 2

    question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参

  4. ruby-on-rails - 启用 Rack::Deflater 时 ETag 发生变化 - 2

    在启用Rack::Deflater来gzip我的响应主体时偶然发现了一些奇怪的东西。也许我遗漏了一些东西,但启用此功能后,响应被压缩,但是资源的ETag在每个请求上都会发生变化。这会强制应用程序每次都响应,而不是发送304。这在没有启用Rack::Deflater的情况下有效,我已经验证页面源没有改变。我正在运行一个使用thin作为Web服务器的Rails应用程序。Gemfile.lockhttps://gist.github.com/2510816有没有什么方法可以让我从Rack中间件获得更多的输出,这样我就可以看到发生了什么?提前致谢。 最佳答案

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. ruby - 鸭子输入字符串、符号和数组的优雅方式? - 2

    这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby​​。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac

  7. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  8. ruby - Paperclip:以编程方式分配图像并设置其名称 - 2

    使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案

  9. ruby - 如何以编程方式检查证书是否已被吊销? - 2

    我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一

  10. ruby-on-rails - 以 DRY 方式覆盖 ActiveRecord 中的 "find" - 2

    我有一些模型需要在它们上面放置自定义查找条件。例如,如果我有一个联系人模型,每次调用Contact.find时,我都想限制返回的联系人只属于正在使用的帐户。我通过Google找到了这个(我对其进行了一些自定义):defself.find(*args)with_scope(:find=>{:conditions=>"account_id=#{$account.id}"})dosuper(*args)endend这很好用,除了少数情况下account_id不明确,所以我将其调整为:defself.find(*args)with_scope(:find=>{:conditions=>"#{s

随机推荐