背景:我打算将一系列 Ubuntu 机器放入零售店,它们被用作哑亭,在大型 LCD 电视屏幕上显示一系列幻灯片。安装后,它们不会连接键盘或鼠标,但会在本地网络上拥有固定 IP。一切都配置为自动启动,没有自动更新,没有省电等 - 我认为除了一件事之外,我们基本上已经准备好了。如果出现问题,我需要零售人员能够重新启动盒子。
我们正在运行 VNC(现在我们已经关闭了桌面增强功能!),以便我们可以在需要时远程进入机器,但这不是我们允许零售员工做的事情。这些机器将在物理上“避开”障碍(可能在天花板空间),因此电源按钮不容易触及!。
我希望有某种方法允许零售员工从他们的 Windows 终端之一的桌面重新启动 Ubuntu 机器。我真的不想给他们某种原始的终端访问权限(命令行会吓到他们!)并且我不希望他们使用 VNC(如上所述)。理想情况下,Windows 桌面上会有一个图标,他们双击它,回答一个简单的“你确定吗?”提示,然后 Ubuntu 框被告知重新启动。Windows 方面不会有问题,我们可以使用 Delphi、Python 和 Qt4 等编写一些东西 - 这是我坚持使用的 Ubuntu 方面。
在看不见的地方,我可以让 Windows 程序通过网络打开一个终端并告诉 Ubuntu 重新启动吗?SSH 可以用于这个吗(我从来没有设置过这种东西)。Windows 编程方面并不是一个真正的问题,只是我是一个完全的 Ubuntu 新手,不知道从平台的角度从哪里开始。
我们考虑的另一件事是让机器每天在设定的时间自动重启(显然是在营业时间之外!)。对我来说,这似乎有点不必要(尽管每周/每月强制重启一次可能是值得的)。
有什么想法或建议吗?能够通过网络按需重启盒子是我的首要要求。
答案1
在看不见的地方,我可以让 Windows 程序通过网络打开终端并告诉 Ubuntu 重新启动吗?SSH 可以用于这个吗[?]
是的。这就是我实际的操作方法。第一步是您需要在 Windows 计算机上安装 Putty。这样您就可以通过 SSH 进入。但现在不用担心。让我们从后往前操作,从 Ubuntu 计算机开始。
我会在 Ubuntu 机器上编写一个脚本来执行重启。如果你可以通过 ssh 进入,那么很可能你不需要完全重启。你可能会说“最好这样做”,但这通常意味着重启时间会比实际需要的时间长四到五倍;这只是浪费时间。
你应该能够通过重新启动 GDM(sudo restart gdm
)来解决问题,因此我会编写一个交互式 Python 脚本,提示用户确保他们是确定他们是否要重新启动 GDM,然后重新启动它。之后,它会等待五秒钟,然后询问他们是否正常工作。如果没有,请完全重新启动(sudo reboot
)。
编辑:还有一种可能性是,您甚至无需重新启动 GDM 即可重新启动这些屏幕显示的应用程序。我不知道您希望发生什么情况,但假设所有三个,并让用户选择按顺序重新启动每个应用程序,从应用程序开始,然后是 gdm,然后是机器。
您可以使用 curses 让它看起来更漂亮。
接下来,您需要确保您的 ubuntu 用户可以执行这些 root 级命令。运行sudoedit /etc/sudoers
并添加如下内容:
Cmnd_Alias REBOOT = /sbin/reboot
Cmnd_Alias RESTART = /sbin/restart
useraccount ALL=REBOOT
useraccount ALL=RESTART
替代useraccount
将运行该脚本的帐户的用户名。
您现在应该能够通过 SSH 登录并测试脚本。
最后一个难题是将 SSH 连接到 Ubuntu 并自动运行脚本。您可以使用证书(它可能更安全),但在本例中,我将仅使用纯文本密码。
putty.exe [email protected] -pw password -m commands.txt
useraccount
显然,1.2.3.4
用password
实际值替换。commands.txt
应该是 Windows 计算机上的一个文本文件,包含如下内容:
python my_python_script.py
笔记:使用登录时的路径是/home/useraccount/
,请将您的 python 脚本放入其中或更改路径commands.txt
。
重要的提示:Putty 的命令运行完毕后会立即关闭。这意味着您的 Python 脚本必须是交互式的(至少在退出前询问“按任意键继续”),否则用户将看不到任何输出。这很简单。您提到了 Python,所以我假设您知道(或知道如何找出)如何执行简单的提示。正如我之前所说,简单的 curses 界面看起来最专业。
重要提示2:有时机器/软件出现故障,硬重启是唯一的选择。如果您的计算机位于一个很难到达的地方,那么绝对值得考虑确保您可以访问其电源,以便您可以将“硬关闭和打开”作为最后的手段。确保您使用日志文件系统,这样工作人员就不会因为过于频繁地使用它而搞砸它,并警告工作人员,如果他们不将其作为最后的手段,邪恶的马戏团人员会偷走他们的孩子,等等。没有什么比工作人员在遇到最小的故障时按下硬重置按钮更糟糕的了。
答案2
如果你可以在 Windows 机器上配置 ssh,那应该很容易。这就是我现在所做的,以便从一台 ubuntu 服务器向另一台 ubuntu 服务器执行一些远程命令
ssh ip.number.0.28 -i /home/javier/.ssh/id_rsa_web -l javier "cd /home/javier/sincrotod;./sincroniza.py"
-i 部分告诉 ssh 使用证书而不是使用密码登录。重新启动机器的命令行命令是 reboot。您需要确保用于登录的用户有权关闭机器。