KDE 下 WPS 双击文件打不开的问题及解决方案
最近在 KDE 桌面环境下使用 WPS Office 时发现一个普遍问题:
无法通过双击打开任意文件,包括本地文件和 SMB/NAS 上的文件。
经过调试发现:
本地文件:WPS 新版 Linux 命令行启动器有 bug,直接双击就打不开。
SMB/NAS 文件:在测试社区提供的 AUR 脚本时发现,它原有逻辑无法正确处理 KIO-FUSE 挂载路径,文件也打不开。
1️⃣ 问题来源
KDE 使用 KIO-FUSE 将 SMB/NAS 路径挂载到
/run/user/...下WPS 启动器没有正确切换工作目录
导致 FUSE 路径解析失败
因此,无论是本地文件还是远程文件,双击打开都会失败。
2️⃣ 社区方案
AUR 上有人提供了包装脚本:
自动去掉
file://前缀能解决部分本地文件打开问题
但仍有两个缺陷:
本地文件仍可能打不开(因为 WPS 命令行 bug)
对 SMB/KIO-FUSE 路径处理不完整
3️⃣ 我的改进方案
在社区脚本基础上,我做了以下增强:
自动切换工作目录:保证 KIO-FUSE 挂载路径可以被 WPS 识别
支持 file:// 和 URL 编码路径
日志记录:方便调试
多文件兼容:可以一次打开多个文件
🛠️ 脚本实现
创建 /usr/local/bin/run-wps.sh:
#!/usr/bin/env bash
# 自动进入文件所在目录再启动 WPS,支持本地路径、file://、KIO-Fuse(SMB/NAS)
log_file="/tmp/kde-open-wps.log"
echo "[$(date)] Arguments:" "$@" >> "$log_file"
declare -a paths=()
declare -a fnames=()
for arg in "$@"; do
path="${arg#file://}"
if [[ ! -e "$path" && "$path" == *%* ]]; then
path=$(printf '%b' "${path//%/\\x}")
fi
if [[ -f "$path" ]]; then
paths+=("$(dirname "$path")")
fnames+=("$(basename "$path")")
else
echo "[$(date)] ⚠️ 文件不存在: $path" >> "$log_file"
fi
done
if [[ ${#paths[@]} -gt 0 ]]; then
cd "${paths[0]}" || { echo "[$(date)] ❌ 无法进入目录: ${paths[0]}" >> "$log_file"; exit 1; }
exec wps "${fnames[@]}"
else
echo "[$(date)] ❌ 没有找到可打开的文件" >> "$log_file"
exit 1
fi
赋予执行权限:
sudo chmod +x /usr/local/bin/run-wps.sh
4️⃣ 修改 Desktop 启动器
把 .desktop 文件中的启动命令改为脚本:
Exec=/usr/local/bin/run-wps.sh %F
修改后即可生效。
这边提供方便的一行脚本:
sudo find /usr/share/applications/ -maxdepth 1 -type f -name "wps-office-*.desktop" -exec bash -c 'cp "$0" "$0.bak" && sed -i -E "s|Exec=.*|Exec=/usr/local/bin/run-wps.sh %F|g" "$0"' {} \;5️⃣ 效果
本地文件:受 WPS 命令行 bug 限制,可能仍打不开
SMB/NAS 文件:经过脚本处理,可正常打开
日志记录:位于
/tmp/kde-open-wps.log
这样,博客就准确反映了:
原始问题是 WPS 命令行 bug
社区方案有修复但仍存在 SMB 问题
改进解决了 SMB/FUSE 兼容问题,并增加了健壮性
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 砂纸の小屋
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果