为了进行计算机外围设备的生产测试,我每天需要启动计算机几百次。
我有一个 Ubuntu 16 测试系统,我运行它sudo systemctl set-default multi-user.target
以启动到文本模式。我仍然必须按Alt-来启动第一个 tty。然后我F1必须登录,然后再次输入密码。sudo
test.sh
我真正想要的是按下电源开关,查看一些通过/失败的信息,然后关闭。
测试脚本加载适当的驱动程序,然后运行测试程序,因此需要超级用户权限。
我尝试了一些 getty 的东西,但失败了。我认为这些说明不适用于 Ubuntu 16.04。
谢谢!!!
答案1
先决条件
为了直接启动到 tty1,请删除splash
以下行/etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
...然后运行sudo update-grub
。
为了防止在 tty1 上systemd
产生getty
,请屏蔽相应的服务:
sudo systemctl mask [email protected]
创建 systemd 服务单元
创建以下文件,当然您可以随意命名:
/etc/systemd/system/example.service
[Unit]
Description=Example tty1 service
After=multi-user.target
[Service]
Type=idle
ExecStart=/bin/bash /bin/example.sh
StandardOutput=tty
StandardInput=tty
TTYPath=/dev/tty1
[Install]
WantedBy=multi-user.target
multi-user.target
到达后该服务将会启动,运行/bin/example.sh
并使用tty1进行输入输出。
运行以下命令启用该服务:
sudo systemctl enable example.service
我不知道你的脚本做了什么,但是这里有一个等待按键并关闭计算机的例子(你仍然可以切换到另一个 tty):
/bin/example.sh
#!/bin/bash
echo Press any key to shutdown
read -n 1 -s -r
poweroff
exit 0
答案2
以 root 身份创建可执行文件 /etc/rc.local。在其中,您可以放入任何命令、shell 脚本等。我假设您正在做的事情是非交互式的。如果是这样,请确保将输出和错误重定向到适当的文件。rc.local 文件的末尾应该有一个“exit 0”。将您的命令放在第一行和最后一行之间。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0