![如何通过 Avahi 宣传 VNC 服务?](https://linux22.com/image/191260/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20Avahi%20%E5%AE%A3%E4%BC%A0%20VNC%20%E6%9C%8D%E5%8A%A1%EF%BC%9F.png)
我有一个家庭网络,有两台 Mac 和一台运行 Debian(以及将来可能的其他发行版)的 PC。我目前有阿瓦希在 Debian PC 上设置网络谈话,将 PC 宣传为 iMac。
当我单击 Finder 侧栏中的 Mac Mini 时,我看到以下内容:
该连接通过我的 Apple ID 进行身份验证,除了 AFP 共享之外,还有一个标记为“共享屏幕...”的按钮
当我单击“共享屏幕...”时,会在第一方 macOS VNC 客户端中打开与 Mac Mini 的 VNC 连接。
当我单击 Finder 侧栏中的 Debian PC(“Alpha”)时,我看到以下内容:
连接被验证为远程本地用户名,我只看到 Netatalk (AFP) 共享。
请注意,过去我使用 CIFS/SMB 共享而不是 AFP/Netatalk,效果同样好。
在第三方应用程序中屏幕,“附近和远程计算机”显示“Kandinsky”(实际上处于离线状态的旧版 Mac Mini)以及当前的 Mac Mini。目前还不清楚 Screens 是否使用 Bonjour (Avahi) 以及它自己的握手服务 Screens Connect(不支持 Linux)来实现“附近和远程计算机”,但它似乎在这里可能相关。
我使用 Screens 的原因是 GNOME 默认 VNC 服务器的身份验证协议与第一方 macOS VNC 客户端不兼容。或类似的东西。 (这是一个已知的问题。)
反正。
当我运行命令时
$ avahi-browse --all --ignore-local --resolve --terminate
在 Debian PC 上,输出包括以下内容:
+ enp3s0 IPv6 Mac Mini VNC Remote Access local
+ enp3s0 IPv4 Mac Mini VNC Remote Access local
= enp3s0 IPv6 Mac Mini VNC Remote Access local
hostname = [macmini.local]
address = [192.168.4.63]
port = [5900]
txt = []
和
= enp3s0 IPv4 Mac Mini VNC Remote Access local
hostname = [macmini.local]
address = [192.168.4.63]
port = [5900]
txt = []
(我的 MacBook 没有显示,因为它没有启用屏幕共享。)
我知道我可以执行以下操作dns-sd
在我的 Mac 上:
% dns-sd -B <type> <domain>
这可能会给我一些有用的信息,但是
% dns-sd -B
不显示 Mac Mini,并尝试浏览“VNC 远程访问”:
% dns-sd -B "VNC Remote Access"
Browsing for VNC Remote Access._tcp
DNSService call failed -65540
不起作用,所以这似乎是一个死胡同。
在所有这些背景下重申我的问题:
如何让 Debian PC 上的 Avahi 守护程序宣传 VNC 远程访问?
虽然我对使用第一方 macOS VNC 客户端持悲观态度,但我看好如果 Debian PC(它以 iMac 的形式呈现)将自己呈现为拥有 VNC Remote,那么可能会出现其他可能性使用权。
我对解决方案的最佳猜测是,我将创建一个 Avahi 服务文件,但 Avahi 文档(例如 的手册页avahi.service(5)
)在这方面非常少。我当前设置的唯一服务是/etc/avahi/services/afp.service
,其内容如下:
$ cat /etc/avahi/services/afp.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=iMac</txt-record>
</service>
<service>
<type>_adisk._tcp</type>
<port>9</port>
<txt-record>sys=waMa=0,adVF=0x100,adVU=fbdbccf4-6b71-4995-8fa7-ad066939d808</txt-record>
<txt-record>dk0=adVN=Backups,adVF=0x81</txt-record>
</service>
</service-group>
知道如何为 VNC 创建相应的文件吗?
或者我需要做什么?
答案1
我刚刚在我的 Pi 上设置了这个,也运行 Debian & 我希望这可以帮助其他人做类似的事情。
在你的 Debian 机器上,它归结为创建vnc.service
一个/etc/avahi/services
.
您可以从 `/usr/share/doc/avahi-daemon/examples; 复制示例;对于 VNC,它应该如下所示:
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_rfb._tcp</type>
<port>5900</port>
</service>
</service-group>
保存后,重新加载 Avahi 以将其拾取:
sudo systemctl restart avahi-daemon.service
关于从 Mac 终端浏览,VNC 的类型为“_rfb._tcb”(请参阅众所周知的服务类型列表:
dns-sd -B _rfb._tcp
andy@XXX ~ % dns-sd -B _rfb._tcp
Browsing for _rfb._tcp
DATE: ---Thu 26 Aug 2021---
14:20:50.925 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
14:20:50.926 Add 3 4 local. _rfb._tcp. rpi
14:20:50.926 Add 3 5 local. _rfb._tcp. rpi
我通常更喜欢使用 GUIDiscovery(以前称为 Bonjour 浏览器),Mac 和 iOS 版 App Store 中也是免费的。