我正在运行tightvnc。在服务器和客户端上我都使用了-depth 8
。
尽管如此,当我启动会话时,客户端的查看器程序会打印此信息,似乎表明将使用 32 位。请解释一下这一点?
VNC server default format:
8 bits per pixel.
True colour: max red 7 green 7 blue 3, shift red 0 green 3 blue 6
Using default colormap with is TrueColor. Pixel format:
32 bits per pixel.
Least significant byte first in each pixel.
True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
我在服务器和客户端上都使用 Ubuntu 10.10 (Maverick) 的桌面版本。两端的 TightVNC 都是 1.3.9 版本。我认为较新的版本 2.x 截至今天只适用于 Windows,客户端 JVM 版本除外。我没有使用客户端 JVM 版本,它也是 2.x,因为我不知道它是否与服务器上的 1.3.9 兼容。
调用如下:
vncserver -depth 8 -geometry 800x600 :1
vncviewer -depth 8 -noshared -nocursorshape 255.255.255.255:1
答案1
也可以尝试这个:
on vncserver use -depth 32
on vncviewer use -bgr233
如果按照 Psycogeek 的建议在服务器上使用 bgr233,服务器上运行的应用程序可能会使用抖动来改善其外观。例如,KDE 就是这样做的。抖动图案,尤其是“误差扩散”方法产生的不规则图案,压缩效果不佳,并且会减慢传输速度。
下面使用 KDE 桌面进行的测试表明,如果服务器以真彩色模式运行,则通过网络传输的数据量最小(深度 32;深度 24 也可能工作良好,但我没有测试过)和客户端请求 bgr233 颜色。然后服务器将颜色“舍入”为 bgr233 调色板中可用的颜色,从而产生压缩效果良好的均匀区域。
根据 vnc 版本、设置和连接类型,通过压缩 ssh 连接运行 vnc 连接也可能更有优势:
ssh -C -L 5901:127.0.0.1:5901 user@remote
(使用 vncviewer 连接到 localhost:1 而不是 remote:1)和/或使用“vncviewer -encodings”调整 vnc 压缩方法列表。
测试
为了获取传输数据量的统计信息,我运行了 ssh -C 和 -v。这会在 ssh 连接结束时(ctrl+d)打印统计信息,显示 vnc 发送的数据量以及 ssh 可以将其压缩到多少量。
在 vnc 服务器上,我以 1440x800 分辨率运行 KDE,并使用 OpenSUSE 12.2 标准桌面。OpenSUSE 桌面的一角有一个桌面文件夹,背景为半透明,并带有渐变灯光效果。该文件夹包含一些图标。此外,还有一个启动面板。对于每个测试,我使用 -C -v 启动 ssh 连接,使用 vncviewer 连接,在桌面完全传输后关闭连接,然后按 ctrl+d 关闭 ssh 连接以读取统计数据。要使用标准 vnc 设置(尽管连接到本地主机),我使用 vncviewer 和 -encodings“copyrect tight hextile zlib corre rre raw”。在第二次测试中,我省略了“tight”。最后,我还使用默认的本地主机设置进行测试。我使用纯色桌面背景颜色重复所有测试,但不使用纯白色或 bgr233 调色板中可用的其他颜色。
结果
(1)背景图片“夜晚”,作者:Christoph Kummer(随 OpenSuSE 12.2 提供):
使用“紧密”编码:
32 bit server + bgr233 client: raw data 231,129, compressed 231,195
16 bit server + bgr233 client: raw data 235,528, compressed 235,548
bgr233 server + bgr233 client: raw data 379,472, compressed 379,524
16 bit server + 16 bit client: crashes xvnc server
32 bit server + 32 bit client: crashes xvnc server
没有“严格”编码:
32 bit server + bgr233 client: raw data 514,614, compressed 336,993
16 bit server + bgr233 client: raw data 526,267, compressed 343,430
bgr233 server + bgr233 client: raw data 1,122,449, compressed 440,477
16 bit server + 16 bit client: raw data 3,422,711, compressed 1,486,065
32 bit server + 32 bit client: raw data 4,620,578, compressed 2,806,274
使用“localhost”设置:
32 bit server + bgr233 client: raw data 1,153,388, compressed 231,740
16 bit server + bgr233 client: raw data 1,153,397, compressed 236,428
bgr233 server + bgr233 client: raw data 1,153,695, compressed 380,015
16 bit server + 16 bit client: raw data 4,612,015, compressed 1,166,199
32 bit server + 32 bit client: raw data 4,611,296, compressed 2,805,144
(2)纯色背景:
使用“紧密”编码:
32 bit server + bgr233 client: raw data 10,151, compressed 9,862
16 bit server + bgr233 client: raw data 14,994, compressed 14,817
bgr233 server + bgr233 client: raw data 76,335, compressed 76,268
16 bit server + 16 bit client: crashes xvnc server
32 bit server + 32 bit client: crashes xvnc server
没有“严格”编码:
32 bit server + bgr233 client: raw data 28,285, compressed 15,885
16 bit server + bgr233 client: raw data 40,597, compressed 25,410
bgr233 server + bgr233 client: raw data 460,902, compressed 93,067
16 bit server + 16 bit client: raw data 161,323, compressed 73,196
32 bit server + 32 bit client: raw data 152,342, compressed 78,657
使用“localhost”设置:
32 bit server + bgr233 client: raw data 1,155,743, compressed 14,926
16 bit server + bgr233 client: raw data 1,153,388, compressed 19,015
bgr233 server + bgr233 client: raw data 1,153,379, compressed 77,238
16 bit server + 16 bit client: raw data 4,611,296, compressed 62,929
32 bit server + 32 bit client: raw data 4,611,296, compressed 74,081
讨论
请注意,1440 x 800 = 1,152,000,乘以 4 等于 4,608,000。在“localhost”模式下,vnc 似乎发送未压缩的数据。桌面背景的选择和服务器颜色深度没有区别。此外,即使在 16 位模式下,vnc 似乎也使用每像素 32 位进行传输。尽管如此,ssh 压缩数据流的能力还是存在差异。
在所有测试情况下,如果服务器以 32 位颜色运行,则客户端上的 bgr233 接收的数据量最少,紧随其后的是 16 位颜色,如果在服务器上也使用 bgr233,则数据量要高得多。纯色背景的效果最为明显。
以图片背景为例,对于 bgr233 客户端,“tight”编码和 localhost + ssh 压缩产生类似的结果。这表明“tight”在这些设置中使用了 zlib 压缩(与 ssh 使用的压缩类似)。
在 16 位和 32 位客户端设置中,使用“tight”时服务器不幸崩溃。在这些设置中,“tight”支持的 jpeg 压缩将非常有用,尤其是背景照片。
警告:结果表明,使用 localhost 默认设置的 ssh 压缩效果良好。但是,测试不包括典型的桌面使用,例如在 Web 浏览器中滚动长页面,对于这种使用情况,“版权”编码可能很重要。
此外,ssh 压缩可能会在快速连接中增加明显的延迟,导致尽管压缩效果很好,但连接仍然感觉很慢。
—JJ
答案2
Psycogeek 给出的答案是:
on vncserver use -pixelformat bgr233
on vncviewer use -bgr233
添加这些选项后,查看器会声称使用 8 位像素。我不会费心询问为什么 -depth 8 不够用,因为它是免费软件。