重新启动计算机/切换到 Windows 的 Shell 脚本问题

重新启动计算机/切换到 Windows 的 Shell 脚本问题

我对 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在重新启动之前刷新对文件系统的更改。

相关内容