背景:我希望将一系列 Ubuntu 机器放到零售点,它们被用作愚蠢的信息亭,在大型 LCD 面板电视屏幕上显示一系列幻灯片。安装后,它们不会连接键盘或鼠标,但会在本地网络上拥有固定的 IP。一切都配置为自动启动,没有自动更新,没有省电等 - 我认为除了一件事我们非常好。如果出现问题,我需要零售人员能够重新启动盒子。
我们正在运行 VNC(现在我们已经关闭了桌面增强功能!),以便我们可以在需要时远程进入机器,但这不是我们允许零售员工做的事情。这些机器将在物理上“不碍事”(可能在天花板空间),因此电源按钮不容易接近!.
我想有一些方法可以让零售人员从他们的一个 Windows 终端的桌面重新启动 Ubuntu 机器。我真的不想给他们某种原始终端访问权限(命令行会吓到他们!)而且我不希望他们使用 VNC(如上所述)。理想情况下,Windows 桌面上会有一个图标,他们双击它,回复一个简单的“你确定吗?” 提示,然后 Ubuntu 框被告知重新启动。Windows 方面不会有问题,我们可以使用 Delphi、Python 和 Qt4 编写一些东西,无论如何——这是我坚持的 Ubuntu 方面。
在视线之外,我可以让一个 Windows 程序通过网络打开一个终端并告诉 Ubuntu 重新启动吗?这是 SSH 可以用来做什么(我从来没有设置过那种东西)。Windows 编程方面并不是真正的问题,只是我是一个完全的 Ubuntu 菜鸟,从平台的角度来看不知道从哪里开始。
我们考虑的另一件事是让机器每天在设定的时间自动重启(显然是在商店营业时间之外!)。对我来说,这似乎有点不必要(尽管每周/每月强制重启一次可能是值得的)。
有什么想法或建议吗?能够通过网络按需重启盒子是我的首要要求。
是的。我就是这样做的。第一步是您需要在 Windows 计算机上安装 Putty。这允许您通过 SSH 登录。但现在不要担心。让我们倒着做,从 Ubuntu 机器开始。
我会在 Ubuntu 机器上编写一个脚本来重新启动。如果您可以 ssh 进入,您可能不需要完全重新启动。您可能会争辩说您“也可以”,但这通常意味着重新启动所需的时间比需要的时间长四到五倍;这只是浪费时间。
您应该能够只重新启动 GDM (
sudo restart gdm
) 就可以逃脱,因此我将编写一个交互式 Python 脚本,提示用户确保他们确定要重新启动 GDM,然后重新启动它。之后,它会等待五秒钟,然后询问他们是否正常工作。如果没有,请完全重新启动 (sudo reboot
)。编辑:您也有可能只需重新启动这些屏幕显示的应用程序,甚至无需重新启动 GDM。我不知道您期望跌倒,但假设所有三个并让用户选择依次重新启动每个,从应用程序开始,然后是 gdm,然后是机器。
你可以使用 curses 让它看起来更漂亮。
接下来,您需要确保您的 ubuntu 用户可以执行这些根级命令。运行
sudoedit /etc/sudoers
并添加如下内容:Subbing
useraccount
将运行此脚本的帐户的用户名。您现在应该可以通过 SSH 登录并测试脚本了。
最后一个难题是将 SSH 连接到 Ubuntu 并自动运行脚本。您可以使用证书(它可能更安全),但在此示例中,我将只使用明文密码。
显然 sub out
useraccount
,1.2.3.4
并且password
具有真实值。commands.txt
应该是 Windows 计算机上的文本文件,其中包含如下内容:注意:使用 be 登录时的路径,
/home/useraccount/
因此要么将 python 脚本放在那里,要么更改commands.txt
.重要提示: Putty 将在其命令完成运行后立即关闭。这意味着您的 Python 脚本必须是交互式的(至少在退出之前询问“按任意键继续”),否则用户将看不到任何输出。这很简单。您提到了 Python,所以我假设您知道(或知道如何找出)如何执行简单提示。正如我之前所说,一个简单的 curses 界面看起来最专业。
重要说明 2:有时机器/软件会出现故障,硬重启是唯一的选择。如果您是一个很难到达的空间中的计算机,那么确保您可以使用它们的电源当然值得考虑,这样您就可以在最后的手段中进行“硬开关”。确保您使用日志文件系统,这样如果员工经常使用它就不会搞砸,并警告员工如果他们不将其用作最后的手段,邪恶的马戏团人员会偷走他们的孩子,等等。没有什么比工作人员在打嗝时按下硬重置按钮更糟糕的了。
如果您可以在 windows 机器中配置 ssh,那应该很容易。这就是我现在要做的,从一个 ubuntu 服务器到另一个服务器执行一些远程命令
-i 部分告诉 ssh 使用证书而不是使用密码登录。重启机器的命令行命令是reboot。您需要确保用于登录的用户有权关闭机器。
http://web.archive.org/web/20100919000947/http://www.lockergnome.com/it/2005/03/11/running-a-program-on-a-remote-server-using-ssh/