From Amarok Wiki

Castellano | English | 简体中文


Contents

问题的由来

如果你的音乐文件是在远程计算机上,并通过 samba/windows 来共享。你把这些共享文件设为只读或可读写,并且已经把它们挂载到了本地。你可以浏览并播放这些音乐,但是不能添加到收藏中。添加时,出错但是没有出错信息,过程也非常慢,或能添加但是播放不了。

解决的办法

这些办法依赖于你共享音乐的方式。

  • 首先创建一个挂载点:http://ubuntuforums.org/showthread.php?p=1734713
  • 如果你的共享设定的是只读,请确定把挂载点对所有用户都设为只读,包括 root 用户。你可以用 root 帐户执行下面的命令行来实现:
mount -t cifs -o fmask=444,dmask=555,guest //server/share /path/to/mount-point

如果你的共享还设置了密码,你还要给用户一些权限。fmask=444 只给所有者,组,和其他用户只读权限,而 dmask= 555 则给它们对目录写和执行的权限。guest 用户则没有任何权限。如果你需要浏览权限,使用 username=remote-user 来替换 guest 用户。提示你输入密码时按一下回车就可以了。你也通过在 'guest' 之后添加uid=localuser,gid=groupname 来修改挂载时的所有权。

  • 如果你的共享是设为可写的,你也可以把他们挂载成只读共享,但是就不能修改标签或类似的东西。
  • 如果你的共享是设为可写的,并且也想编辑标签,你还要做两件事:
    1. 把共享挂载成对任何人都是可写的,但是所有者仍是 root。你可能不想这样做,因为其他人或许也会修改了你的标签:
mount -t cifs -o fmask=666,dmask=777,guest //server/share /path/to/mount-point
    1. 把共享挂载成对任何人都是可写的,但是所有者仍是你。这样你就可以选择那些人可以查看目录,在这个例子中,我们把其他人的权限都设为只读.
mount -t cifs -o fmask=644,dmask=755,uid=localuser,gid=groupname,guest //server/share /path/to/mount-point
  • 这些方法中有一个共同点都没有很好地解决:在可读 samba 目录下的只读文件,如果是只读挂载的话,应该是可以修改的,但结果是不能,即使改成可读写挂载也不能,因为 Amarok 还日不能从文件系统上获取明确的信息。



如果这样的话,你就要把前面两个方法结合起来:

    1. 把共享挂载成对所有用户只读,如前所述,包括 root 用户,让 amarok 使用这个目录。当然你也就不能编辑标签了。
    2. 在一个新的挂载点把共享挂载成对可读写模式,就像你来时做的那样。使用这个新的挂载点来做其他事,除了 amarok 的收藏。

基本原理

上面的方法是一步一步试出来的。好像 Amarok 的索引器会读取文件的权限和所有者,即使你的用户不是所有者。结果在处理时就需要这些权限。而文件系统却返回的是不同的权限,因为你不是所有者嘛。你也可以把所有用户设成和所有者一样的权限来解决。当然,这些权限要事先在服务器上试验一下,如果你把共享挂载成对所有用户都可读写,但结果却只能读不能写,那么这些设定就没法达到目的了。最后的那个方法是最好的,因为只有需要的那些用户才有相应的权限。

让服务固定下来

如果上面的方法对你是有效的,你可能不想每次重启计算机的时候都要重做一次。你可以把相应的信息写到/etc/fstab 文件中。 这个文件定义了在计算机启动时要挂载的文件系统。Fstab 文件的布局格式如下 :

设备名devicename 挂载点mountpoint 文件系统类型filetype 可选项options dump pass

设备名devicename 就是你的共享目录//server/share
挂载点mountpoint 就是你的本地挂载目录 /path/to/mount-point
文件系统类型filetypecifs
可选项option 是先前例子中所有跟在 -o 后面的内容。例如
fmask=644,dmask=755,guest,uid=your-user-name,gid=groupname,guest。如果你的共享设置了密码,那么就要创建一个文件,在第一行写上username = your-user-name,第二行写password = your-password。修改文件权限,这样你就只有你可以读它(当然还有里面的密码),然后把credentials=存用户名和密码的文件名 作为可选项之一。

dumppass 都可以设成 0 0
以上所有内容都是 /etc/fstab 中的一个新行中完成,就像下面这样:

//server/share /path/to/mountpoint cifs uid=localusername,gid=users,guest,fmask=444,dmask=555 0 0


把 server, share, 等换成你自己的内容,所有内容都一定要在一行中。

在 Windows 计算机上挂载共享

要在 Windows 2k/XP/Server 共享,必须要把共享挂载成 cifs 文件系统。因为 cifs 文件系统比 windows 的能在目录中处理更多的文件,并且交互能力也更强。还有一点非常重要,就是要把设置iocharset=utf8 因为 Windows 从 Windows 2000 开始,其文件系统使用的是 Unicode。这样你在读更多 ASCII 以外的字符时就不会出现问题了。 下面是一行 /etc/fstab 例子:

 //server/share /path/to/mountpoint cifs iocharset=utf8,uid=localusername,gid=users,guest,file_mode=0444,dir_mode=0555 0 0

还可参考:Dynamic Collection 粗体文字