#!/bin/bash # 通用桌面快捷方式创建脚本 - 适配所有Linux发行版 echo "🔗 通用桌面快捷方式创建工具" echo "================================" # 获取当前目录的绝对路径 INSTALL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "📁 安装目录: $INSTALL_DIR" # 检测桌面目录的通用方法 detect_desktop_dir() { local desktop_dir="" # 方法1: 使用xdg-user-dir (最标准的方法) if command -v xdg-user-dir >/dev/null 2>&1; then desktop_dir=$(xdg-user-dir DESKTOP 2>/dev/null) if [ -n "$desktop_dir" ] && [ -d "$desktop_dir" ]; then echo "$desktop_dir" return 0 fi fi # 方法2: 检查常见的桌面目录名称 local common_desktop_names=( "Desktop" # 英文 "桌面" # 中文简体 "桌面" # 中文繁体 "デスクトップ" # 日文 "바탕화면" # 韩文 "Bureau" # 法文 "Escritorio" # 西班牙文 "Área de Trabalho" # 葡萄牙文 "Рабочий стол" # 俄文 "Schreibtisch" # 德文 "Scrivania" # 意大利文 ) for name in "${common_desktop_names[@]}"; do if [ -d "$HOME/$name" ]; then echo "$HOME/$name" return 0 fi done # 方法3: 检查XDG配置文件 if [ -f "$HOME/.config/user-dirs.dirs" ]; then desktop_dir=$(grep "XDG_DESKTOP_DIR" "$HOME/.config/user-dirs.dirs" | cut -d'"' -f2) if [ -n "$desktop_dir" ]; then # 处理相对路径 if [[ "$desktop_dir" == \$HOME/* ]]; then desktop_dir="${desktop_dir/\$HOME/$HOME}" fi if [ -d "$desktop_dir" ]; then echo "$desktop_dir" return 0 fi fi fi # 方法4: 使用find查找可能的桌面目录 local possible_dirs=$(find "$HOME" -maxdepth 1 -type d -name "*esktop*" -o -name "*桌面*" -o -name "*Bureau*" -o -name "*Escritorio*" 2>/dev/null | head -1) if [ -n "$possible_dirs" ] && [ -d "$possible_dirs" ]; then echo "$possible_dirs" return 0 fi return 1 } # 创建桌面文件内容 create_desktop_file_content() { local install_dir="$1" cat << EOF [Desktop Entry] Version=1.0 Type=Application Name=雷达检测系统 Name[en]=Radar Detection System Name[zh_CN]=雷达检测系统 Name[zh_TW]=雷達檢測系統 Comment=雷达实时检测和点云显示系统 Comment[en]=Radar real-time detection and point cloud display system Comment[zh_CN]=雷达实时检测和点云显示系统 Comment[zh_TW]=雷達即時檢測和點雲顯示系統 Exec=bash -c 'cd "$install_dir" && ./start.sh' Icon=applications-science Terminal=true Categories=Science;Engineering; StartupNotify=true Path=$install_dir Keywords=radar;detection;pointcloud;雷达;检测;点云; EOF } # 检测桌面环境 detect_desktop_environment() { if [ -n "$XDG_CURRENT_DESKTOP" ]; then echo "$XDG_CURRENT_DESKTOP" elif [ -n "$DESKTOP_SESSION" ]; then echo "$DESKTOP_SESSION" elif command -v gnome-shell >/dev/null 2>&1; then echo "GNOME" elif command -v kded4 >/dev/null 2>&1 || command -v kded5 >/dev/null 2>&1; then echo "KDE" elif command -v xfce4-session >/dev/null 2>&1; then echo "XFCE" else echo "Unknown" fi } # 设置桌面文件为可信任(针对不同桌面环境) set_desktop_file_trusted() { local desktop_file="$1" local desktop_env=$(detect_desktop_environment) echo "🖥️ 检测到桌面环境: $desktop_env" case "$desktop_env" in *GNOME*|*gnome*) # GNOME桌面环境 if command -v gio >/dev/null 2>&1; then gio set "$desktop_file" metadata::trusted true 2>/dev/null || true echo "✅ GNOME桌面文件已设置为可信任" fi ;; *KDE*|*kde*|*plasma*) # KDE桌面环境通常不需要额外设置 echo "✅ KDE桌面环境,无需额外设置" ;; *XFCE*|*xfce*) # XFCE桌面环境 echo "✅ XFCE桌面环境,请确保桌面图标已启用" ;; *) echo "⚠️ 未知桌面环境,可能需要手动设置桌面文件权限" ;; esac } # 主要创建流程 main() { echo "" echo "🔍 检测桌面目录..." DESKTOP_DIR=$(detect_desktop_dir) if [ -n "$DESKTOP_DIR" ]; then echo "✅ 找到桌面目录: $DESKTOP_DIR" # 创建桌面快捷方式 echo "🖥️ 创建桌面快捷方式..." DESKTOP_FILE="$DESKTOP_DIR/雷达检测系统.desktop" create_desktop_file_content "$INSTALL_DIR" > "$DESKTOP_FILE" chmod +x "$DESKTOP_FILE" # 设置为可信任 set_desktop_file_trusted "$DESKTOP_FILE" echo "✅ 桌面快捷方式已创建: $DESKTOP_FILE" # 验证文件是否有效 if command -v desktop-file-validate >/dev/null 2>&1; then if desktop-file-validate "$DESKTOP_FILE" 2>/dev/null; then echo "✅ 桌面文件格式验证通过" else echo "⚠️ 桌面文件格式可能有问题,但应该仍可使用" fi fi else echo "❌ 未找到桌面目录" echo "💡 可能的原因:" echo " 1. 系统没有桌面环境" echo " 2. 桌面目录使用了特殊的名称" echo " 3. 权限问题" echo "" echo "🔧 手动解决方案:" echo " 请手动将以下内容保存为 ~/Desktop/雷达检测系统.desktop" echo " (或保存到您的实际桌面目录)" echo "" echo "--- 桌面文件内容 ---" create_desktop_file_content "$INSTALL_DIR" echo "--- 内容结束 ---" echo "" echo "然后运行: chmod +x ~/Desktop/雷达检测系统.desktop" return 1 fi # 创建应用程序菜单快捷方式 echo "" echo "📱 创建应用程序菜单快捷方式..." APPLICATIONS_DIR="$HOME/.local/share/applications" mkdir -p "$APPLICATIONS_DIR" APP_DESKTOP_FILE="$APPLICATIONS_DIR/yushu-radar.desktop" create_desktop_file_content "$INSTALL_DIR" > "$APP_DESKTOP_FILE" chmod +x "$APP_DESKTOP_FILE" echo "✅ 应用程序菜单快捷方式已创建" # 创建命令行快捷方式 echo "" echo "⌨️ 创建命令行快捷方式..." USER_BIN_DIR="$HOME/.local/bin" mkdir -p "$USER_BIN_DIR" cat > "$USER_BIN_DIR/yushu-radar" << SCRIPT_EOF #!/bin/bash # 雷达检测系统启动器 cd "$INSTALL_DIR" ./start.sh SCRIPT_EOF chmod +x "$USER_BIN_DIR/yushu-radar" echo "✅ 命令行快捷方式已创建: ~/.local/bin/yushu-radar" # 检查PATH设置 if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then echo "⚠️ ~/.local/bin 不在PATH中" echo " 建议将以下行添加到 ~/.bashrc 或 ~/.profile:" echo " export PATH=\"\$HOME/.local/bin:\$PATH\"" echo " 然后运行: source ~/.bashrc" else echo "✅ PATH配置正确,可以使用 yushu-radar 命令" fi # 询问是否创建系统级快捷方式 echo "" read -p "是否创建系统级命令快捷方式?(需要sudo权限) (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then if sudo ln -sf "$USER_BIN_DIR/yushu-radar" /usr/local/bin/yushu-radar 2>/dev/null; then echo "✅ 系统级快捷方式已创建: /usr/local/bin/yushu-radar" else echo "❌ 系统级快捷方式创建失败" fi fi echo "" echo "🎉 快捷方式创建完成!" echo "" echo "📋 使用方法:" echo "1. 桌面双击: 雷达检测系统图标" echo "2. 应用程序菜单: 搜索'雷达'" echo "3. 命令行: yushu-radar" echo "4. 直接启动: ./start.sh" echo "" echo "🔧 故障排除:" echo "- 如果桌面图标不显示,请检查桌面环境设置" echo "- 如果图标无法点击,请右键选择'允许启动'或'信任'" echo "- 不同桌面环境可能需要不同的设置方法" echo "" } # 运行主程序 main "$@"