一台机器上多个用户的 VNC

一台机器上多个用户的 VNC

我在一台运行 OS X 10.5 的计算机上,该计算机有多个用户帐户。是否有某种方法可以让其中一个用户通过 ssh 进入计算机,启动 vnc 服务器,然后连接到它?我尝试过 Vine Server,它应该具有类似的功能,但似乎要么使用 ssh 启动服务器,要么在每个帐户中都启动服务器,但不能同时进行。

谢谢

答案1

内置于操作系统 – 没有。

你会想看看Aqua Connect 终端服务器并提出问题8966这里是关于服务器故障。

答案2

我以前曾为此烦恼过(在 Tiger 上?),但一直没有想出好的解决方案。我发现你必须以图形方式登录用户,然后启动 VNC 服务器,之后,你可以使用快速用户切换切换到其他用户并登录。所以,这实际上意味着没有人可以使用 Mac 本身 [编辑:因为会出现快速用户切换对话框]——它们都需要通过 VNC 连接,但很高兴看到 Mac 可以轻松运行多个会话。[编辑:此外,虽然可以同时有多个人使用计算机,但每次只能有一个人登录,这需要 30 秒到 1 分钟的时间。]

需要注意的一件事:在网络启动指南中,我相信它指出您需要为每台将进行网络启动的机器获得一个操作系统许可证;我认为这同样适用于像这样的 VNC 设置。

我不记得了,但这里有一些笔记和一些代码供您玩(风险自负)。

Mac Thin-Client Plan
---------
Client:
Uses paramiko script.  User is asked for name and password.  Tries to connect.  Alerts user on failure.
If it connects, it CDs to a certain directory on the server, and calls a function, using the name and password.

Server:
Script is run.  Server checks if it is able to log the user in at that moment.
When permitted, the console comes up, and then a VNC server is started.
Server tells client which port VNC server is started on.

Client then exits paramiko application, and launches a VNC application.
When VNC application is exited, client goes back to the log-on screen.

StartVNCLogin.sh(在作为服务器的 Mac 上运行):

#!/bin/bash

# This script should be runnable by any user.  It takes two parameters -- the user's name and password.
# This script should be owned by root, and should let the owner read/write/execute, but no other user.
#   sudo chmod 700 /sbin/StartVNCLogin.sh
# In /etc/sudoers, the script needs to be set up so all users can run it.
# See http://mandrivausers.org/lofiversion/index.php/t33702.html.
#   use visudo to add "ALL ALL=NOPASSWD: /sbin/StartVNCLogin.sh" to the end of the file

# With the parameters -- the user name and password -- the script will switch to the login screen,
# and will then use applescript to log the user in
# Afterwards, it will start a VNC session for that user, and return the port number.
# At this point, the client can connect via VNC.

say "Log on called"

# Do we have root access?
if [ ! $( id -u ) -eq 0 ]; then
    echo "Error: Script must be run with administrator priviledges"
    exit -1
fi


# Get the user name and password
if [ "$#" = "2" ]; then
    export USERNAME="$1"
    export PASSWORD="$2"
else
    echo "Error: Please supply a username and password."
    exit -2
fi

# This step should not be necessary, as the user had to use ssh to run this script
# Verify that the user exists on the system
USERID=`id -u $USERNAME`;
if [[ -z $USERID ]]; then
    echo "Error: The user $USERNAME does not exist on this machine"
    exit -3;
fi;


# Now, switch to the login screen
echo "Info: bringing up login screen" 
# Ask the logon screen to come up and allow us to log-in as the desired user
#/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID $USERID &
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

sleep 15

# Then, use applescript to enter the user's password
echo "Info: logging user in"

# And enter in the password
osascript <<END
set pword to system attribute "PASSWORD"
set username to system attribute "USERNAME"
tell application "System Events" 
    keystroke username
    keystroke return
    delay 1
    keystroke pword
    delay 1
    keystroke return
    keystroke return
end tell
END

echo "Info: Waiting for user to be logged in"


echo "Info: Starting VNC server."

# Now, we start the VNC server
if [ -x /Applications/Vine\ Server.app/Contents/Resources/OSXvnc-server ]; then
    /Applications/Vine\ Server.app/Contents/Resources/OSXvnc-server -rfbport 0 -desktop "New Desktop" -rfbnoauth -restartonuserswitch N -unicodekeyboard 0 -keyboardloading n -pressmodsforkeys n -eventtap 3 -swapbuttons -rendezvous y &
else
    "Error: Can not find the VNC server application!  The server is not properly configured for VNC login."
    exit -4;
fi;

客户端脚本的重要部分(在 Linux 上运行):

# note that I am redirecting stderr to stdout for simplicity
chan.exec_command("sudo /sbin/StartVNCLogin.sh " + username + " " + pw + " 2>&1")
stdout = chan.makefile('rb') 

vnc_port = -1

for line in stdout:
    print '... ' + line.strip('\n')
    # look for a line where a port is stated
    if line.find("Started Listener Thread on port") > -1:
        vnc_port = int(line.rsplit(' ', 1)[1])
        print "--- The VNC Port is %d" % vnc_port
        chan.close()    # sever the connection; we know what we need to know

print "Done"

#chan.close()
t.close()

os.system("vncviewer %s:%d -Shared -Fullscreen" % (hostname, vnc_port))

答案3

使用 XDMCP 设置 Xvnc,然后他们就可以使用 vnc 并登录到服务器。互联网上有很多关于如何设置的指南,这里是

答案4

我们很高兴地使用适用于 OSX 的 Vine Server 和适用于客户端的 JollyFastVNC 的组合。

Vine Server 为每个登录用户提供了一个“个人” VNC 服务器实例,该实例位于一个唯一的端口号上。唯一的技巧是,用户需要已经登录到 Mac,并且 VineServer 在其帐户下运行,才能使用 VNC。解决由此引发的引导问题的方法就是 Vine Server“系统服务器”,它为 Mac 控制台提供 VNC 会话 - 因此,任何有权访问控制台会话的用户都可以登录到 Mac(从而启动他们自己的私人 Vine Server 实例)

配置相对简单:

1/ 打开快速用户切换,以便多个用户可以共享 Mac。

2/ 以管理员用户身份登录实际的 Mac 控制台,您也希望授予该管理员远程访问权限。以该用户身份启动 Vine Server,然后选中“登录时打开”首选项。

3/ 打开 Vine Server Preferences 并记下分配给此 VNC 服务器实例的端口号。手动重新输入该号码以将此实例“固定”到该端口以供后续启动。还建议您在此处为此唯一用户会话设置密码。

4/ 转到“共享”选项卡并确保选中“允许多个用户会话”

5/ 转到“启动”选项卡并选中“系统服务器...”按钮。在默认端口 (5900) 上启动系统服务器实例。这将是您的安慰要使用的 VNC 服务器。(我建议您在此设置密码)

6/ 关闭首选项窗口并单击重新启动服务器按钮。

您现在就可以登录VNC 用户会话:一个作为端口 5900 上的控制台,一个作为您刚刚登录的管理员用户。

现在,对于每个用户,让他们登录并将 Vine Server 添加到他们的 dock,然后重复上述步骤 2、3 和 4。

我们注意到的唯一两个问题是,如果 Mac 断电重启,系统服务器不会自动启动。初始用户需要登录并通过 UI 启动它。

第二个问题是,如果用户通过远程 VNC 控制台会话登录,他们随后对 Mac 的使用将在控制台会话和“个人”VNC 会话中可见。也就是说,控制台会话将保持与最后登录的用户绑定,直到其他人远程或本地登录。我们通过在登录后再次打开远程控制台会话并使用快速用户切换到“显示登录窗口”来解决这个问题,这似乎会强制控制台会话再次分离。

JollyFastVNC 是一款支持 Bonjour 的 VNC 客户端,带有一个不错的“可用服务器”浏览器。它为每个正在运行的 Vine Server 实例和控制台实例提供远程 Mac“主机名:端口”,如果您记不住端口号,可以轻松导航。

希望这可以帮助。

相关内容