TIAN-LEIDA-JIANCE/universal_shortcut_creator.sh

259 lines
8.3 KiB
Bash
Raw Normal View History

#!/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 "$@"