这再简单不过了,但我无法让它工作,所以我希望一些 Samba 或 Avahi 专家可以帮助我。
我的家庭网络上有一台笔记本电脑和一台台式机,都运行 Ubuntu 19.10,还有一堆 Android 设备和偶尔运行 Windows XP 或 Vista 的机器,或者虚拟 Windows 7。笔记本电脑也可能位于我可以控制的其他网络上。
我的目标是将 Ubuntu 笔记本电脑上的一个分区共享到桌面。主要是为了我可以使用 Darktable、Digikam 和桌面的大屏幕来查看和编辑图像。这取决于名称解析和一致的网络名称。
它能有多难?
我在两台机器上都设置了 Samba(samba 版本 2:4.10.7+dfsg-0ubuntu2.3、samba-common、samba-common-bin)和 nautilus-share。经过一番折腾,我能够使用 Nautilus 中的 smb://ip-address/ 和命令终端中的 smbclient 双向连接到共享文件夹。
但是我无法从机器名称进行连接;Nautilus 返回了错误:
‘无法访问位置无法从服务器检索共享列表:连接被拒绝”
命令终端:
$ smbclient -L ////JohnsMacBookPro//Pictures -U john
Unable to initialize messaging context
do_connect: Connection to JohnsMacBookPro failed (Error NT_STATUS_UNSUCCESSFUL)
由于某种原因,笔记本电脑使用的是 NT1,而台式机使用的是 SMB3;我无法弄清楚原因。通过将客户端和服务器的最小值和最大值设置为 SMB3 来强制版本并没有改变情况。
因此,请遵循 @Morbius1 在此帖子中的建议Bionic Beaver 无法发现 samba 主机 - netbios,对于简单的 Ubuntu 网络,我:
1) 在两台机器上清除并重新安装 samba - samba、samba-common、samba-common-bin。我没有编辑 smb.conf。
2)在两台机器上创建 /etc/avahi/services/samba.service 文件:
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">SMB %h</name> ## Display Name
<service>
<type>_smb._tcp</type>
<port>445</port>
</service>
</service-group>
3)在两台机器上添加并启用samba用户:
sudo smbpasswd -a john
sudo smbpasswd -e john
4)使用 Nautilus 从笔记本电脑共享图片分区和 sambashare 文件夹,并从台式机共享 sambashare 文件夹。
现在我可以使用名称进行连接 - 尽管 Nautilus 的网络文件夹列表中有重复。但分区名称附加了一个数字,该数字会发生变化。对于像 Digikam 这样的应用程序来说,这是一个问题,因为它每次运行时都希望在同一个位置找到资源。
重新启动笔记本电脑后,桌面上的 Nautilus、‘其他位置’、‘网络’显示 7 个图标(重新启动可能会清除这些图标):
Folder icon: 'pictures on johnsmacbookpro-15.local' which links
Folder icon: 'pictures on johnsmacbookpro-9.local' which linked yesterday, not today
Network drive icon: 'SMB JohnsMacBookPro-15' clicking on which generated the matching folder and mount point
Network drive icon: 'SMB Desktop01' which links to sambashare folder and print
Network drive icon: 'DESKTOP01 (File Sharing)' which links as above
Windows Network, leading to WORKGROUP and resources JOHNSMACBOOKPRO and DESKTOP01. Clicking on DESKTOP01 leads to the shared folders. JOHNSMACBOOKPRO generates the error message '**Unable to access location** Failed to retrieve share list from server: Connection refused' (as before from samba when accessing network resources)
Network drive icon: 'DESKTOP01 (File Sharing)' which links as above
笔记本电脑的其他位置 - 网络列表更简单,因为虽然它显示“SMB JohnsMacBookPro-15”,但它列出并链接到“DESKTOP01”和“SMB Desktop01”,没有附加数字。
两台机器上 testparm -s 的输出都是未改变的基本 smb.conf:
$ testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
# Global parameters
[global]
log file = /var/log/samba/log.%m
logging = file
map to guest = Bad User
max log size = 1000
obey pam restrictions = Yes
pam password change = Yes
panic action = /usr/share/samba/panic-action %d
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd program = /usr/bin/passwd %u
server role = standalone server
server string = %h server (Samba, Ubuntu)
unix password sync = Yes
usershare allow guests = Yes
idmap config * : backend = tdb
[printers]
browseable = No
comment = All Printers
create mask = 0700
path = /var/spool/samba
printable = Yes
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
如果我可以为笔记本电脑获得一个一致的名称(我假设该名称来自 Avahi/msdns 包),我眼前的问题就解决了?
Samba 似乎一直存在同样的问题。不确定这些问题是否可以解决,从长远来看,这可能是一个更好的解决方案。
答案1
我怀疑这将是一个反复的过程。
这里的问题是 samba 可以通过两种不同的方式按名称解析机器:按 NetBIOS 名称和按其 mDNS/Avahi 名称。如果一切正常,Nautilus 将默认显示这两种名称,但它会使用相同的名称后跟(文件共享)来显示。NetBIOS 不稳定,因此您可能能够或无法建立连接。Avahi 相当一致,并且内置于 19.10 中。
这是我在两台机器上要做的第一件事:
[1] 确保两台机器上都有 /etc/avahi/services/samba.service 文件。
[2] 在两台机器上编辑 /etc/samba/smb.conf 并在该行下方workgroup = WORKGROUP
添加这一行:
multicast dns register = no
[3]保存smb.conf并重新启动smbd:
sudo service smbd restart
您的 Linux 机器将始终显示为SMB 主机名直接位于“其他位置”下,而不是“Windows 网络”下。这是 Avahi 方式。由于您已在 smb.conf 中禁用了 Avhai 方式,因此不会出现任何重复。
它们也可能显示在“Windows 网络”下,但没有 SMB 前缀。这是 NetBIOS 方式。也有一种方法可以禁用此功能,但这样会干扰 Windows 计算机的发现。