增加了设置虚拟机开机无头自启动功能

增加功能:虚拟机可设置为开机自启动。
重复执行该命令视为更新操作,比如删除或者修改了虚拟机的名称。再次调用可更新启动的数量和名称。
This commit is contained in:
悟空的日常镜像仓库 2023-12-10 19:35:36 +08:00
parent e5ec4aeae4
commit 0886d596c2

View File

@ -242,6 +242,122 @@ install_fcitx5_chewing() {
fi fi
} }
# 设置开机自启动虚拟机virtualbox
set_vm_autostart() {
# 定义红色文本
RED='\033[0;31m'
# 无颜色
NC='\033[0m'
GREEN='\033[0;32m'
# 显示带有红色文本的提示信息
echo -e
echo -e "设置虚拟机开机自启动,需要${GREEN}设置系统自动登录。${NC}\n${RED}这可能会带来安全风险。当然如果你后悔了,也可以在系统设置里取消自动登录。是否继续?${NC} [Y/n] "
# 读取用户的响应
read -r -n 1 response
echo # 新行
case $response in
[nN])
echo "操作已取消。"
exit 1
;;
*)
# 设置自动登录 免GUI桌面登录
setautologin
do_autostart_vm
;;
esac
}
#设置自动登录
setautologin() {
# 使用whoami命令获取当前有效的用户名
USERNAME=$(whoami)
# 设置LightDM配置以启用自动登录
sudo sed -i '/^#autologin-user=/s/^#//' /etc/lightdm/lightdm.conf
sudo sed -i "s/^autologin-user=.*/autologin-user=$USERNAME/" /etc/lightdm/lightdm.conf
sudo sed -i "s/^#autologin-user-timeout=.*/autologin-user-timeout=0/" /etc/lightdm/lightdm.conf
}
# 设置开机5秒后
# 自动启动所有虚拟机(无头启动)
do_autostart_vm() {
# 检查系统上是否安装了VirtualBox
if ! command -v VBoxManage >/dev/null; then
Show 1 "未检测到VirtualBox。请先安装VirtualBox。"
return
fi
# 确定/etc/rc.local文件是否存在如果不存在则创建它
if [ ! -f /etc/rc.local ]; then
echo "#!/bin/sh -e" | sudo tee /etc/rc.local >/dev/null
sudo chmod +x /etc/rc.local
fi
# 获取当前用户名
USERNAME=$(whoami)
# 获取当前所有虚拟机的名称并转换为数组
VMS=$(VBoxManage list vms | cut -d ' ' -f 1 | sed 's/"//g')
VM_ARRAY=($VMS)
# 检查虚拟机数量
if [ ${#VM_ARRAY[@]} -eq 0 ]; then
Show 1 "没有检测到任何虚拟机,您应该先创建虚拟机"
return
fi
# 创建一个临时文件用于存储新的rc.local内容
TMP_RC_LOCAL=$(mktemp)
# 向临时文件添加初始行
echo "#!/bin/sh -e" >$TMP_RC_LOCAL
echo "sleep 5" >>$TMP_RC_LOCAL
# 为每个现存的虚拟机添加启动命令
for VMNAME in "${VM_ARRAY[@]}"; do
echo "su - $USERNAME -c \"VBoxHeadless -s $VMNAME &\"" >>$TMP_RC_LOCAL
done
# 添加exit 0到临时文件的末尾
echo "exit 0" >>$TMP_RC_LOCAL
# 用新的rc.local内容替换旧的rc.local文件
cat $TMP_RC_LOCAL | sudo tee /etc/rc.local >/dev/null
# 删除临时文件
rm $TMP_RC_LOCAL
# 创建一个临时文件用于存储虚拟机列表
TMP_VM_LIST=$(mktemp)
# 将虚拟机名称写入临时文件
for VMNAME in "${VM_ARRAY[@]}"; do
echo "$VMNAME" >> "$TMP_VM_LIST"
done
# 使用 dialog 显示虚拟机列表,并将按钮标记为“确定”
dialog --title "下列虚拟机均已设置为开机自启动" --ok-label "确定" --textbox "$TMP_VM_LIST" 10 50
# 清除对话框
clear
# 删除临时文件
rm "$TMP_VM_LIST"
# 去掉开机提示:解锁您的开机密钥环
sudo rm -rf ~/.local/share/keyrings/*
# 显示/etc/rc.local的内容
Show 0 "已将所有虚拟机设置为开机无头自启动。查看配置 /etc/rc.local,如下"
cat /etc/rc.local
}
declare -a menu_options declare -a menu_options
declare -A commands declare -A commands
menu_options=( menu_options=(
@ -250,6 +366,7 @@ menu_options=(
"安装常用办公必备软件(office、QQ、微信、远程桌面等)" "安装常用办公必备软件(office、QQ、微信、远程桌面等)"
"安装虚拟机VirtualBox 7" "安装虚拟机VirtualBox 7"
"安装虚拟机VirtualBox 7扩展包" "安装虚拟机VirtualBox 7扩展包"
"设置虚拟机开机无头自启动"
"卸载虚拟机" "卸载虚拟机"
"虚拟机一键格式转换(img2vdi)" "虚拟机一键格式转换(img2vdi)"
"准备CasaOS的使用环境" "准备CasaOS的使用环境"
@ -264,6 +381,7 @@ commands=(
["安装虚拟机VirtualBox 7"]="install_virtualbox" ["安装虚拟机VirtualBox 7"]="install_virtualbox"
["安装虚拟机VirtualBox 7扩展包"]="install_virtualbox_extpack" ["安装虚拟机VirtualBox 7扩展包"]="install_virtualbox_extpack"
["虚拟机一键格式转换(img2vdi)"]="convert_vm_format" ["虚拟机一键格式转换(img2vdi)"]="convert_vm_format"
["设置虚拟机开机无头自启动"]="set_vm_autostart"
["卸载虚拟机"]="uninstall_vm" ["卸载虚拟机"]="uninstall_vm"
["准备CasaOS的使用环境"]="patch_os_release" ["准备CasaOS的使用环境"]="patch_os_release"
["安装CasaOS(包含Docker)"]="install_casaos" ["安装CasaOS(包含Docker)"]="install_casaos"
@ -276,9 +394,12 @@ commands=(
) )
show_menu() { show_menu() {
YELLOW="\e[33m"
NO_COLOR="\e[0m"
echo -e "${GREEN_LINE}" echo -e "${GREEN_LINE}"
echo ' echo '
*********** DIY NAS 工具箱v1.0 *************** *********** DIY NAS 工具箱v1.1 ***************
使用环境:基于debian 12的深度deepin系统(内核版本6.1) 使用环境:基于debian 12的深度deepin系统(内核版本6.1)
脚本作用:快速部署一个办公场景下的Diy NAS 脚本作用:快速部署一个办公场景下的Diy NAS
@ -286,8 +407,13 @@ show_menu() {
' '
echo -e "${GREEN_LINE}" echo -e "${GREEN_LINE}"
echo "请选择操作:" echo "请选择操作:"
for i in "${!menu_options[@]}"; do for i in "${!menu_options[@]}"; do
if [[ "${menu_options[i]}" == "设置虚拟机开机无头自启动" ]]; then
echo -e "$((i + 1)). ${YELLOW}${menu_options[i]}${NO_COLOR}"
else
echo "$((i + 1)). ${menu_options[i]}" echo "$((i + 1)). ${menu_options[i]}"
fi
done done
} }