我有一个脚本,可以将 Samba 共享挂载到桌面上的文件夹,它运行没有问题,但是当它设置为 LoginHook 时,它不会挂载该文件夹。
有人有可以安装共享并发布信息的登录钩子吗?或者知道登录期间安装共享存在什么问题吗?
这是我的脚本:
#!/usr/bin/env ruby
@domain="Lancaster"
@user=ARGV[0]
#@[email protected](/\n/,"")
@userfolder="/Users/" + @user.to_s
@smbshare="//#{@user}@hercules/everyone"
system("mkdir #{@userfolder}/Desktop/everyone")
system("mount_smbfs #{@smbshare} #{@userfolder}/Desktop/everyone | #{@userfolde$
system("
/usr/bin/osascript <<-EOF
tell application \"System Events\"
activate
display dialog \"Welcome to the #{@domain} domain #{@user}\n\nY$
end tell
EOF
")
答案1
概述:
创建一个 launchd 代理(在本例中是一个 bash 脚本),每隔几分钟挂载我们喜欢的任何共享。它并不完美,但可以工作。这是针对 Samba 共享的,但您可以对其进行修改以执行其他类型。
在 Dave Nicoll 的帮助下制作了有关共享 windows/x iTunes 库的内容。
我正在使用笔记本电脑的无线网卡来确定我是否已连接到家庭 SSID。当然,您可以使用任何您想要的条件执行。
如果您要像我一样使用 SSID 作为挂载条件,您可能会发现将 OS X 附带的 Airport 实用程序别名为 /usr/bin/ 是有益的。如果不是,请跳到下一部分。
打开终端并运行:
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport
记住这个输出:
airport -I | grep '.* SSID:' | sed 's/^.* SSID: //'
剧本:
我的条件检查
- 共享尚未挂载(1-4 行)
- 我们的机场卡网络的 SSID 不为空(第 5-8 行)
- 我们的 SSID 必须等于预定义的 SSID,在我的情况下是“2600leagues”(第 9 行)
打开你最喜欢的文本编辑器并启动一个新文件,我将它命名为 MountShares.sh
if [ -d '/Users/kyle/Music/iTunes/Podcasts/' ]; then
#echo Nothing to do, share is mounted
exit
else
if [ -z `airport -I | grep '.* SSID:' | sed 's/^.* SSID: //'` ]; then
#echo SSID is Null, we're not connected with the Airport to any Network.
exit
else
if [ `airport -I | grep '.* SSID:' | sed 's/^.* SSID: //'` == "2600leagues" ]; then
#echo SSID is 2600leagues!
/sbin/mount -o nodev,nosuid -t smbfs '//Kyle:[email protected]/media/Music' '/Users/kyle/Music/'
fi
fi
fi
接下来,我们需要编辑第 11 行以代表您的特定需求。您只需编辑大胆的部分:
/sbin/mount -o nodev,nosuid -t smbfs '//用户:密码@服务器IP或名称/共享' '/您希望将其安装到哪里/‘
例子:
/sbin/mount -o nodev,nosuid -t smbfs '//Kyle:[email protected]/media/Music' '/Users/kyle/Music/'
现在我们已经编辑了 mount 命令,尝试运行它终端。如果成功,您的共享应该可以在安装位置使用。(在我的示例中/Users/kyle/Music/
)
编辑1 号线的 bash 脚本来反映已挂载共享内的文件或目录。如果您要像我一样使用 SSID 作为条件,您需要更改5号线通过替换2600里格使用您的 SSID。
将 bash 脚本保存在方便的位置。(我使用~/Library/Scripts/NetworkMounts/MountShares.sh
)
现在你需要使 bash 脚本可执行,我们使用修改模式去做这个。
在终端:
chmod 777 ~/Library/Scripts/NetworkMounts/MountShares.sh
如果网络共享仍处于安装状态,请确保立即将其卸载/弹出。(发现者作品)
尝试通过执行脚本终端:
~/Library/Scripts/NetworkMounts/MountShares.sh
如果一切顺利,您的共享应该已挂载。现在剩下要做的就是让脚本每隔一段时间运行一次。通常你会使用定时任务这类事情,但 10.6 已经弃用它。苹果宁愿你使用他们的启动服务。
制作启动代理人
为了帮助你使启动代理获得林贡来自 sourceforge。
- 打开 Lingon
- 创建新的用户代理(我的代理)
- 给它起一个名字,例如 com.kyle.MountShares
- 选择或输入 bash 脚本的路径
~/Library/Scripts/NetworkMounts/MountShares.sh
- 指定您希望它何时运行。(我有系统加载时运行并且 *每隔 10分钟)
- 保存
- 退出 Lingon
就是这样
如果这有帮助,请告诉我;我尽可能快地把这些都打出来了。
答案2
上周五我花了大半天时间试图解决这个问题。结果发现,用户登录名现在区分大小写。例如,在我的 AD 中,用户的登录名是“JSmith”。使用用户名“jsmith”安装共享失败,并显示“管道损坏”。使用“JSmith”安装对我来说如预期一样。
我正在使用 10.5.8。
答案3
我过去曾成功使用过以下脚本,但有一段时间我没有使用或需要它:
mkdir -p ~/Desktop/Folder
mount_smbfs //domain;[email protected]/Share /Users/username/Desktop/Folder
答案4
您可以将 Mac 客户端绑定到您的 AD 域,而不是使用登录挂钩。在用户的 AD 帐户中,您可以将主文件夹设置为您的 SMB 共享,并配置所有内容,以便该文件夹在登录时挂载。或者,如果这是一台共享计算机并且它不是主user
文件夹,您可以设置机器首选项以在启动时在计算机上挂载共享。您可以为您的用户获得 AD 身份验证的额外优势。