![重新启动计算机/切换到 Windows 的 Shell 脚本问题](https://linux22.com/image/1084168/%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E8%AE%A1%E7%AE%97%E6%9C%BA%2F%E5%88%87%E6%8D%A2%E5%88%B0%20Windows%20%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC%E9%97%AE%E9%A2%98.png)
我对 Linux 没什么经验,几乎从未写过 shell 脚本,但需要一台同时运行 Windows 和 Linux 的工作站来执行某些计算。不过,该工作站大多是从 Windows 计算机远程使用的。
我在一个分区上安装了 Windows,在另一个分区上安装了 Linux(使用 grub2 进行双启动)。我编写了一个小型 shell 脚本,它重新启动计算机,从 Linux 进入 Windows,取消 grub-reboot,基本上遵循https://wiki.debian.org/GrubReboot
#!/bin/bash
gksudo grub-reboot "Windows 7 (loader) (on /dev/sda1)"
这完美地运行,并且当重新启动时 Windows 启动,并且当再次重新启动时 ubuntu 启动。
为了通过远程连接工作,我在 Windows 和 ubuntu 上安装了 teamviewer(teamviewer 9,直接从 teamviewer 网站安装)。
现在我的问题如下。当我启动计算机时,我可以在 Ubuntu 中毫无问题地使用 teamviewer。当我使用上述脚本重新启动到 Windows 时,我也可以使用 teamviewer。接下来,当我从 Windows 重新启动到 Ubuntu 时,我无法连接到 teamviewer。如果我再次重新启动(当我在远程位置时我无法这样做),teamviewer 可以在 Ubuntu 中再次完美运行。
我尝试查看(当我无法使用 teamviewer 时)teamviewer 服务是否在 Ubuntu 中运行。似乎确实如此,因为当我尝试下面的代码时,它告诉我服务正在运行。如果我停止并再次启动服务,teamviewer 仍然无法正常工作。
sudo teamviewer --daemon enable (or start)
我最终(并非完美)的解决方案是编写一个脚本,该脚本基本上会在 ubuntu 启动时重新启动一次。我为它编写了一个小的 shell 脚本,并将其放在 etc/init.d 文件夹中。该脚本基本上会创建一个 .txt 文件并检查是否存在该文件。如果计算机重新启动,teamviewer 将再次工作。但这个脚本会带来问题。
#!/bin/bash
if [ ! -f /tmp/reboot.txt ];
then
echo "test" > /tmp/reboot.txt
sleep 3s
reboot
else
fi
exit 0
此脚本生成了 reboot.txt 但并未重启。我还尝试删除 else,但这样做后,系统仍不断重启。
有人能帮我解决teamviewer问题吗,告诉我如何轻松解决它无法工作的问题。或者帮我用shell脚本在Ubuntu启动时重新启动一次。最后这个解决方案绝对可以让我毫无问题地使用teamviewer,额外等待30秒的额外重启也没有问题,所以我认为这是最简单的解决方案。
更新:我尝试了 MilliByte 下面的回答,但没有成功。
答案1
我将把脚本改成这样:
#!/bin/bash
if [ ! -f /tmp/reboot.txt ]
then
echo "test" > /tmp/reboot.txt
sync
reboot
fi
exit 0
将sync
在重新启动之前刷新对文件系统的更改。