TIAN-LEIDA-JIANCE/universal_shortcut_creator.sh

259 lines
8.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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