1、脚本.sh文件编写以名为两个APP为例可执行程序为例#!/bin/bash source $HOME/.bashrc export LD_LIBRARY_PATH/usr/local/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH # APP1 drone_down 配置 APP1_DIR/home/nvidia/drone_down/build APP1_BIN${APP1_DIR}/drone_down APP1_LOG${APP1_DIR}/drone_down_run.log TITLE1drone_down DELAY15 # # APP2 camer_CapSave 配置 APP2_DIR/home/nvidia/camer_CapSave/build APP2_BIN${APP2_DIR}/camer_CapSave APP2_LOG${APP2_DIR}/camer_CapSave_run.log TITLE2camer_CapSave DELAY23 # run_single_app() { local app_dir$1 local app_bin$2 local log_path$3 local win_title$4 local wait_sec$5 # 关键显式设置 DISPLAY通常为 :0根据实际调整 local display${DISPLAY:-:0} gnome-terminal --title$win_title -- bash -c # 继承外部环境并补充 export DISPLAY\$display\ export LD_LIBRARY_PATH/usr/local/lib:/usr/lib/aarch64-linux-gnu:\$LD_LIBRARY_PATH # 可选的导出其他必要变量比如 ROS 相关 # export ROS_MASTER_URIhttp://localhost:11311 # 记录环境信息便于调试 echo \ 环境变量 \ $log_path env $log_path echo \ 当前目录 \ $log_path pwd $log_path cd \$app_dir\ || { echo \\$(date %Y-%m-%d %H:%M:%S) 【错误】目录切换失败\ \$log_path\ sleep 20 exec bash } if [ ! -f \$app_bin\ ]; then echo \\$(date %Y-%m-%d %H:%M:%S) 【错误】程序不存在\ \$log_path\ sleep 20 exec bash fi if [ ! -x \$app_bin\ ]; then chmod x \$app_bin\ echo \\$(date %Y-%m-%d %H:%M:%S) 补充执行权限\ \$log_path\ fi # 用完整路径精确匹配避免误杀 existing_pid\$(pgrep -f \^$app_bin$\ 2/dev/null) if [ -n \\$existing_pid\ ]; then echo \\$(date %Y-%m-%d %H:%M:%S) 程序已运行 PID:\$existing_pid\ \$log_path\ sleep 10 exec bash fi echo \等待 ${wait_sec} 秒启动【$win_title】\ for ((i${wait_sec}; i0; i--)); do echo -ne \剩余 \$i 秒\\r\ sleep 1 done echo -e \\\n 启动 $win_title \ echo \\$(date %Y-%m-%d %H:%M:%S) 程序启动\ \$log_path\ # 前台运行并同时输出到终端和日志 stdbuf -oL \$app_bin\ 21 | tee -a \$log_path\ echo -e \\\n $win_title 程序已退出 \ echo \\$(date %Y-%m-%d %H:%M:%S) 程序结束\ \$log_path\ sleep 20 exec bash } # 正确传参 run_single_app $APP1_DIR $APP1_BIN $APP1_LOG $TITLE1 $DELAY1 #run_single_app $APP2_DIR $APP2_BIN $APP2_LOG $TITLE2 $DELAY22、开机自启配置执行如下命令gnome-session-properties打开设置界面在command中输入:gnome-terminal --titlestart_com -- bash -c /path/to/your/xx.sh; exec bash