259 lines
8.3 KiB
Bash
259 lines
8.3 KiB
Bash
#!/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 "$@" |