分类 视频脚本 下的文章

视频点此

一个很简单的想法,源于我的KDE桌面——要知道,我的KDE桌面壁纸设置的就是每日一图,bing来源。

思路也很简单。现如今iOS系统已经预置了一个十分方便但异常强大的组件:快捷指令,而根据KDE可以使用bing每日一图来推断,便可知道bing的图片接口是开放的。所以前提条件都准备好了,就直接来编写快捷指令吧。

打开快捷指令,新建。

首先就是要获取bing当天推荐的图片。而获取的方法自然是通过Bing提供的API获取。

API地址如下:https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

快捷指令中已经提供了从API获取js结果的功能,直接搜索添加获取URL内容,其中获取来源填入上面的API地址即可。

从这个网址获取到的结果是一个json字符。在快捷指令中,可以很方便的将json串转换为词典并从词典中提取指定键对应的值。而这也是作为互联网上面API使用最多的数据传输方法。上述Bing的API得到的json保存有很多信息。而我们只需要其中的图片路径即可。假定上述获取到的json命名为Bing,那么它有关图片地址的键就在Bing.images.url。而这个路径并不是完整的,它没有保存这个图片对应的通用的网址前缀。而这个前缀就是Bing的网址https://www.bing.com/

在了解了上述规律之后,就可以继续完成这个快捷指令了。我们现在只是拿到了最初始的json字符串,接下来就是要解析并获取真正的图片了。而这些功能快捷指令都有着对应的功能。

增加一个功能获取词典值,来源位置会自动加入前一步骤得到的结果(URL的内容),也就是刚刚通过API获取的json。而为了之后简化路径,可以在这里先进行一次筛选,使之后的选择可以以Bing.images中进行。

点击URL的内容,弹出的小窗口中,类型(第二行蓝字位置)选择词典

下方获取键对应的值输入images,完成。这样变把此处的来源变成Bing.images里的内容了。

这个功能的后方,输入网址对应的键名url,获取的是

设置完成后这个功能整体表现出来的是这样的:

得到了URL,现在就可以补全URL来获取图片了。但是要注意,这里还是通过网址来获取的,所以使用的功能仍然是获取URL内容,而路径要输入完成的,补全的路径。因此需要在默认填入的词典值前面加上通用前缀https://www.bing.com/。整体看起来是这样的

最后,把获取到的墙纸设置为得到的图片即可。添加一个操作,名为设定墙纸,根据自己的需要,选择设置锁定界面还是主界面,而来源里边默认加入的URL的内容要注意,因为获取到的是图片,所以需要把类型设置为图像。如图。

同时,展开这个功能折叠的内容,关闭显示预览(否则执行后会进入到设定壁纸的预览界面,手工确定才能完成,就不符合原始的需要了。

视频点此

苹果家族的软件以封闭闻名,但macOS是一个例外——毕竟历史原因使得它除了图形界面以外都有规律可循。所以当使用Linux的思维去理解macOS的时候,就发现了一些到目前为止都没见过有谁提到过的有趣的细节。

我曾经在以前的内容中说过神奇的快捷方式——软链接。当时我就说过这玩意儿在Windows下用处不多,但Linux和macOS下用途很广。那时候我说这句话其实还是有些心虚的,因为我只用过Linux,对macOS的情况不是很了解,仅仅是为Linux和macOS的内核相似才得出的那个结论。但现在不一样了,我真正使用过macOS了,所以对于这个结论,我只能说:macOS同样很频繁的在使用软链接,可能比Linux更甚。

因为它为每个程序都软连接出来了一整套用户根目录,形成了一种沙盒机制。

我们可以简单领略一下:在home文件夹,打开资源库——你可能过需要按下cmd+shift+.来显示这个文件夹,或通过显示设置使它取消隐藏属性。

打开资源库,你会看到一个名字为Containers的文件夹。顾名思义,这里是用户程序的容器集合。打开它,你便能看到很多熟悉的面孔。

如果你有兴趣的话可以把每个文件夹都打开看看。这里我就直接跟你说结论吧:这里边一个文件夹就是macOS为一个程序准备的一个沙盒——或者说,一套用户home。为什么这么说呢?我们随意打开一个你就会看到。

是不是很熟悉?是的,这里边的文件夹结构与home是一模一样的,只不过这里多了Library、SystemData和tmp。

但是还是有些许不同的地方。注意到有几个文件夹左下角的小箭头了吗?错了,它不是普通的快捷方式,而是软链接。我们通过终端来看一下它们连接到的具体位置。

没有错,这些软连接都指向了我们的home。具体来解释一下:桌面、下载、视频、音乐、图片四个文件夹是与用户目录同步的,而文档、库、系统数据、临时文件每个程序都是单独占有的。这就使得在程序看来,自己是这个系统上唯一的程序,还可以在这个系统里边随意玩耍;而在macOS系统看来,每个程序就算玩出天来,也没能逃脱分配给它的这个乌托邦中。莫名的让我想到了缸中之脑理论…

那么如此设计的优势在哪儿呢?就我个人的感受,相对于另外两种系统来说,如此存储使得每个程序都有着相对隔离的系统环境,最大程度的避免依赖问题——任何系统都需要依赖,不只是Linux;而且所有文件都建立在了一个统一的位置,当卸载软件时直接删除这个文件夹便清理掉了由这个软件带来的所有文件——当然,音视频文档会保留,因为是软链接到了用户目录下。而与之相对的,就用户或者系统的视角来看,想去到一个程序的目录下路径就会变得异常复杂,以至于如果不耐下心来找的话会很难找到。

不过,既然找到了,就可以进行一些骚操作了。比如说微信电脑端、QQ电脑端的无限期云端同步功能。

视频点此

可能你想不到,我一直订阅着个人版的Office365,所以我拥有1T的onedrive存储空间。说实话,我一直想不到这么大的空间能用来干啥,直到我看到了我这个树莓派做的局域网文件中心。
为何不外挂上onedrive,整一个异地备份呢?

实现这个系统的关键其实就有一点:在树莓派上安装onedrive。我尝试过一些开源onedrive程序,但要么不支持arm架构,要么安装很繁琐。所以最终我跳出了花里鼓哨的onedrive客户端,转向了rclone——一个支持将很多协议映射成本地目录的神奇的软件。直接从源中安装即可。

安装好后,输入命令rclone authorize “onedrive”,会打开浏览器进入登录界面,登录成功后终端会返回token,保存好。

接下来,通过命令rclone config来根据向导进行配置,按照提示输入操作即可。只需注意最开始要输入一个名称,这个名称指代了网络硬盘,以后挂载时会使用到这个名字,所以要记住。同时,不需要选择高级设置,以及在最后登录一步的时候选择手动配置,将刚刚保存的token完全复制到终端即可。

现在,就可以通过命令rclone mount 名字: 挂载点 —daemon把你的onedrive挂载到本地了。这个挂载点完全指向了onedrive的目录,任何复制到这里的文件都将被直接上传到onedrive中。换句话说,复制进这个文件夹的文件将不再占用本地的磁盘空间,而是直接进入到onedrive之中。

测试无误后,我们将这条命令设置为开机启动。但是我发现通常方法,也就是在rc.local中加入语句并不能实现开机自启,所以这里也介绍一下设置开机启动的方法。

~/.config下新建autostart文件夹,其中新建一个.desktop文件,文件名随意。其中输入如下文本。

[Desktop Entry] 
Type=Application 
Exec=lxterminal -e “刚才那一串挂载指令”
Name=随便一个名字
Comment=随便一些注释

这就为rclone挂载命令建立了一个自动启动文件。以后无论何时启动树莓派,rclone都会把onedrive挂载到指定的文件夹中。受到一些小伙伴的提示,如此自启动可能只有把树莓派设置为使用gui且自动登录时候才会生效。要注意。

之后进行双向同步操作。我这里直接简单粗暴的通过计划任务加bash脚本来实现,一个负责从本地拷贝到远程(也就是挂载了onedrive的那个文件夹),一个负责从远程拷贝回本地。而本地目录是一个特定的目录,所有想同步到onedrive上的文件夹通过软链接的方式放到这个文件夹中。

到此,我的这个双点同步系统就搭建完成了。

相关视频:OBSAUR

这个文章只是简要介绍一下使用OBS构建软件包的基本方法,以及AUR与OBS在编写时候的对应关系。编写一个规范且更易维护的软件包要比这里边提到的关注点要多。

一、什么是OBS

开放构建服务Open Build Service)是一个通用的系统,以自动、连贯和可重复的方式从源代码构建和分发软件包。它可以为各种操作系统和硬件架构发布软件。我们用来构建发行版的 OBS 参考服务器目前(2018 年 6 月)已有 53219 个项目,其中包含了 79794 个仓库中的 468316 个软件包,用于众多发行版和架构,并由 53171 个已确认的开发者使用。

资料来源于Portal:构建服务 - openSUSE Wiki

二、什么是AUR

Arch 用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的 Arch 软件仓库。AUR 中的软件包以软件包生成脚本(PKGBUILD))的形式提供,用户自己通过 makepkg) 生成包,再由 pacman) 安装。创建 AUR 的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入 community 仓库。许多官方仓库软件包都来自 AUR。通过 AUR,大家相互分享新的软件包生成脚本(PKGBUILD) 和其他相关文件)。用户还可以为软件包投票。如果一个软件包投票足够多、没有协议问题、打包质量好,那么它就很有希望被收录进官方 community 仓库(以后就可以直接通过 pacmanabs 安装了)。

资料来源于Arch User Repository(简体中文)

三、快速通过OBS构建一个软件包

以我打包的electron-wechat为例。

一切的基础,是需要你拥有一个OBS账号并登录。前往OBS官网注册并登录,你就拥有你的工作空间了。

通过Create Package,来创建一个软件包目录,并将源码上传到这个目录中。但要注意的是,OBS构建的服务器是不联网的,所以对于electron-wechat这种nodejs的程序,由于通过npm命令进行构建的时候一定会去往nodejs官网检索相关依赖的最新版本,所以对于这种程序,最简单的办法就是直接上传编译好的文件进行分发。


这里想补充一下:已经在自己的电脑上编译好了,那就已经可以使用了,为啥还要使用OBS打包呢?很简单,因为自己编译出来的东西是零散的,需要手工把文件放到对应的位置上去,而且没有一个统一的卸载方法。通过OBS打包之后,就可以进入到软件源中,直接通过统一的安装/卸载指令来使用一个软件了。


所以对于electron-wechat,我就是在本地编译好了之后,将二进制文件打包成tar.bz2,上传到了打包目录。

之后,编写spec文件。这个文件告诉了OBS到底都需要干什么来完成打包。

在打包目录下新建软件包名.spec,开始填空。(如果使用openSUSE的vi编辑器直接新建的话,会直接生成一个.spec文件的模板,填空即可。)

  • Name: 软件包名
  • Version: 软件包版本
  • Release: 使用默认即可
  • Summary: 一句话介绍
  • License: 许可证类型
  • Group: 软件类别
  • Url: 项目地址
  • Source: 源码地址

    如果有多个源码,可以通过Source0 Source1 依次指定。参考我打包的dingtalk

  • Provides: 提供的内容
  • Obsoletes: 排斥的内容

然后,在%description下写一个比较详细的软件介绍,不主要的部分就写完了。

之后,%prep下写入打包要做的准备工作。比如解压缩源码包。对于以软件包名-版本号.tar.bz2形式的包,默认的%setup -q即可完成解压。其他命名方法的bz2,需要补充 -n 参数。即setup -q -n 包名

如果还有其他要解压之类的工作,一并写在这个下面,可以参考rpm打包的宏,如果不熟悉,也可以使用bash命令代替。

准备工作做好,填写%build编译部分。对于一般的C语言,可以上传源码包,在%build填写编译的指令。而对于nodejs这种无法通过编译的软件,由于上传的就是编译好的二进制文件,所以编译这部分留空。

%install指示了编译出来的所有文件都要放到什么地方。这里相对比较简单理解,就是通过bash命令,把编译出来的文件依次复制到它应该在的位置即可。至于具体应该在什么位置,就要看一看Linux的标准了。如果不确定的话,把所有文件放在/opt/软件名这个文件夹下也未尝不可。这种做法并不标准,但很快。不过即使如此操作,也需要注意desktop桌面入口文件和图标文件一定要放置在它应该在的位置,否则在图形界面一定会找不到启动的按钮,图标显示也会有问题。
%post -p /sbin/ldconfig%postun -p /sbin/ldconfig两句话照抄即可。

之后,在%files下书写这个软件都拥有哪些文件和文件夹。宗旨就是产生了哪些文件,就把绝对路径写在这里。

到此,一个简易的spec文件就写好了。

之后的查错,可以通过OBS编译结果进行排查,根据报错进行修改即可。

四、AUR编写与OBS的异同

AUR与OBS非常类似,区别只在于OBS的spec文件命名是根据软件包名命名的,而AUR的文件叫做PKGBUILD。所以在AUR建立一个软件工程后,直接新建一个PKGBUILD,在里边编写即可。

至于编写的内容,与OBS也很类似,只不过AUR是一个更纯粹的脚本,不能使用OBS里边诸如%prep这种宏来书写。

我的OBS仓库的dingtalk就是借鉴AUR的dingtalk-linux。可以对比着来看一看。

相对来说,AUR的编写更容易上手,但是相对OBS来说,编写出来的PKGBUILD通用性会差一些。不过无论哪种,思路都是类似的。看一看现有的文件写法,自己尝试一下就会了。

视频点此

这个不是我想到的方法,因为这种笔记本想做到直通太麻烦了。不过机缘巧合,我在这个博客中看到了方法,尝试之后也成功了,遂来记录一下。

上面的博客有着非常详细的操作步骤及一些基本原理介绍,有兴趣可以阅读一下。不过在我尝试的过程中发现文章漏掉了一些步骤,再加上我的电脑与文章的博客不同,获取vBIOS的过程有些许出入,所以这里只记录一下操作过程,每一步的解释及更多扩展请看原博客。

我的电脑:HP暗影精灵一代,i7-6700hq+950M独显

事前准备:KVM虚拟机拥有一个UEFI启动的Win10,含有QXL显卡、实体机启动的win10、Linux宿主在使用英特尔核显,独显驱动禁用或驱动被卸载

一、隔离独显

  1. lspci -nn | grep NVIDIA,获得类似输出:

    01:00.0 3D controller [0302]: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] [10de:1c8d] (rev a1)

    记录中括号[10de:1c8d]中的ID

  2. 编辑或创建/etc/modprobe.d/vfio.conf,内容书写 options vfio-pci ids=刚刚记录的ID
  3. 修改/etc/mkinitcpio.conf,在MODULES里增加vfio_pci vfio vfio_iommu_type1 vfio_virqfd
  4. mkinitcpio -P更新initramfs

二、增加英特尔虚拟核显

  1. 编辑/etc/default/grub,在GRUB_CMDLINE_LINUX中增加i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on
  2. 编辑或创建/etc/modules-load.d/lantian.conf,增加三行

    kvmgt
    vfio-iommu-type1
    vfio-mdev
  3. grub-mkconfig -o /boot/grub/grub.cfg重新生成grub
  4. 重启
  5. lspci | grep "HD Graphics"记录最开始的PCI地址,如00:02.0
  6. 创建显卡

    sudo su
    echo "af5972fb-5530-41a7-0000-fd836204445b" > "/sys/devices/pci0000:00/0000:刚刚记录的PCI地址/mdev_supported_types/i915-GVTg_V5_4/create"

前面两部的成功性验证:

二.4重启之后,使用lspci -nnk查找英伟达,如果kernel in usevfio,则表明隔离NVIDIA成功;二.6第二行命令可以成功执行,则表明创建虚拟核显成功。

三、增加虚拟显卡进虚拟机

virsh edit 虚拟机名,在</device>前增加

<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='off'>
  <source>
    <address uuid='af5972fb-5530-41a7-0000-fd836204445b'/>
  </source>
</hostdev>

保存后启动虚拟机,如果在设备管理器中多了一个Microsoft 基本显示适配器,则说明增加成功,耐心等待驱动安装成功,便会显示出Intel核显名称了。

一旦驱动安装完成,关闭虚拟机,再次编辑配置。

  • 刚刚增加的hostdev标签,将display='off'更改为display='on'
  • 删除<graphics><video>两块,用如下内容替换

    <graphics type='spice'>
      <listen type='none'/>
      <image compression='off'/>
      <gl enable='yes'/>
    </graphics>
    <video>
      <model type='none'/>
    </video>
  • </domain>前增加

    <qemu:commandline>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.ramfb=on'/>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.driver=vfio-pci-nohotplug'/>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.x-igd-opregion=on'/>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.xres=1920'/>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.yres=1080'/>
        <qemu:arg value='-set'/>
        <qemu:arg value='device.hostdev0.romfile=/vbios_gvt_uefi.rom'/>
        <qemu:env name='MESA_LOADER_DRIVER_OVERRIDE' value='i965'/>
    </qemu:commandline>

    其中,vbios_gvt_uefi.rom从这里下载,并对应修改上面的文件路径。

  • <domain type='kvm'>更改为<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

启动虚拟机,如果图像正常显示且设备管理器中只有英特尔核显,则说明截至目前,操作都是成功的。

四、获取显卡vBIOS

这部分在实体Windows下进行。

  1. 前往惠普支持官网,下载适合自己的惠普BIOS更新程序
  2. 百度下载MaxwellBiosTweaker备用
  3. 启动更新程序,选择第三项Copy
  4. 解压缩导出的所有bin文件(已知7z可成功解压)
  5. 进入解压出来的文件夹,打开到有.rom文件的文件夹
  6. 打开MaxwellBiosTweaker,依次将.rom拖入文件,如果程序成功显示各种内容,则这个文件是一个显卡BIOS文件
  7. 对于是显卡BIOS的文件, 对照显示的内容,找到是自己显卡的rom文件,复制出来备用

五、编译虚拟机UEFI固件

这部分回到Linux下进行。

# 根据 GitHub 上用户反馈,UEFI 固件编译完成后不能移动位置
# 所以要先找好存放的地方
cd /opt
# 使用root用户进行,避免sudo前缀
sudo su
git clone https://github.com/tianocore/edk2.git
# 安装编译过程中需要的依赖
pacman -S git python2 iasl nasm subversion perl-libwww vim dos2unix
yaourt -S gcc5
# 假设你导出的显卡 BIOS 存放在 /vbios.rom
cd edk2/OvmfPkg/AcpiPlatformDxe
xxd -i /vbios.rom vrom.h
# 编辑 vrom.h,把 unsigned char 数组(在第一行)的名字修改成 VROM_BIN
# 把文件末尾的长度变量(在最后一行)改名为 VROM_BIN_LEN,并记录下长度值,我的是 167936
wget https://github.com/jscinoz/optimus-vfio-docs/files/1842788/ssdt.txt -O ssdt.asl
# 编辑 ssdt.asl,修改第 37 行为 VROM_BIN_LEN 的值
# 然后执行下面这行命令,会报错但是没关系,只要 Ssdt.aml 有了就行
iasl -f ssdt.asl
xxd -c1 Ssdt.aml | tail -n +37 | cut -f2 -d' ' | paste -sd' ' | sed 's/ //g' | xxd -r -p > vrom_table.aml
xxd -i vrom_table.aml | sed 's/vrom_table_aml/vrom_table/g' > vrom_table.h
# 返回 edk2 的目录下打补丁
cd ../..
wget https://gist.github.com/jscinoz/c43a81882929ceaf7ec90afd820cd470/raw/139799c87fc806a966250e5686e15a28676fc84e/nvidia-hack.diff
dos2unix nvidia-hack.diff
dos2unix OvmfPkg/AcpiPlatformDxe/QemuFwCfgAcpi.c
patch -p1 < nvidia-hack.diff
# 开始编译 OVMF
make -C BaseTools
source edksetup.sh
# 修改 Conf/target.txt 中如下变量的值:
# - ACTIVE_PLATFORM       = OvmfPkg/OvmfPkgX64.dsc
# - TARGET_ARCH           = X64
# - TOOL_CHAIN_TAG        = GCC5
build
# 等待编译完成,确认 Build/OvmfX64/DEBUG_GCC5/FV 文件夹下有这两个文件:
# - OVMF_CODE.fd
# - OVMF_VARS.fd
# 然后替换你的虚拟机的 UEFI 参数,注意修改虚拟机名
cp Build/OvmfX64/DEBUG_GCC5/FV/OVMF_VARS.fd /var/lib/libvirt/qemu/nvram/虚拟机名_VARS.fd

六、增加独显进虚拟机

visrh edit 虚拟机名称,做如下配置

<!-- 把 os 一段改成这样,注意对应你的 OVMF_CODE.fd 路径 -->
<os>
  <type arch='x86_64' machine='pc-q35-4.2'>hvm</type>
  <loader readonly='yes' type='pflash'>/opt/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF_CODE.fd</loader>
  <nvram>最后复制的那个路径</nvram>
</os>
<!-- 把 features 一段改成这样,就是让 QEMU 隐藏虚拟机的特征 -->
<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
    <vendor_id state='on' value='GenuineIntel'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
  <vmport state='off'/>
</features>
<!-- 添加显卡直通的 PCIe 设备,必须放在核显 hostdev 的后面 -->
<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
  </source>
  <rom bar='off'/>
  <!-- 注意这里的 PCIe 总线地址必须是 01:00.0,一点都不能差 -->
  <!-- 如果保存时提示 PCIe 总线地址冲突,就把其它设备的 <address> 全部删掉 -->
  <!-- 这样 Libvirt 会重新分配一遍 PCIe 地址 -->
  <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0' multifunction='on'/>
</hostdev>
<!-- 在 </qemu:commandline> 之前添加这些参数 -->
<qemu:arg value='-set'/>
<!-- 下面的两个id为 lspci -nn中的那两个id -->
<qemu:arg value='device.hostdev1.x-pci-vendor-id=0x10de'/>
<qemu:arg value='-set'/>
<qemu:arg value='device.hostdev1.x-pci-device-id=0x1c8d'/>
<qemu:arg value='-set'/>
<!-- 下面的两个id为 lspci -nnk中,subsystem显示的id那两个 -->
<qemu:arg value='device.hostdev1.x-pci-sub-vendor-id=0x17aa'/>
<qemu:arg value='-set'/>
<qemu:arg value='device.hostdev1.x-pci-sub-device-id=0x39d1'/>
<qemu:arg value='-acpitable'/>
<qemu:arg value='file=/ssdt1.dat'/>

最后一行的ssdt1.dat从这里下载,并将路径对应修改。

启动虚拟机,等Win10自动安装驱动。

如果不出意外的话,直通就完成了。

视频点此

VNC,Virtual Network Console的缩写。说白了,VNC是从类Unix系统出来的,横跨全平台的图形远程桌面,有别于纯文本的ssh,功能强大。所以,来看看再Linux下要如何部署VNC服务。

只是使用的话,不必研究它的原理,只需要知道Linux下面是通过软件包tigervnc来实现vnc服务的即可。

这里以Arch为例。

  • 安装tigervnc:pacman -S tigervnc
  • 启动vnc服务:vncserver

    • 要求一个密码,输入后回车
    • 确认刚刚输入的密码,输入后回车
    • 是否需要一个仅查看的密码,需要则输入y回车,否则输入n回车完成设置
    • 若输入y,则继续输入新的密码两遍,完成配置
  • 编辑~/.vnc/xstartup,只保留最前面unset开头的两行,之后的全部删除,并增加一行exec dbus-launch startplasma-x11(这是kde桌面增加的行,其他的请去往wiki查看),保存
  • 注销再登录,重新启动vnc服务,设置完成

到此,就可以从其他电脑上通过vnc相关软件连接了。其中,vnc使用的端口在输入vncserver之后输出的内容中有所体现。规律为5900+冒号后的数字。如输出为:1,则端口号为5901

更多资料

更详细更高级的vnc使用方法,参考TigerVNC (简体中文) - ArchWikiVNC - openSUSE Wiki