docker 中使用 pywpsrpc

一般如果使用带桌面环境的 docker,比如 dorowu/ubuntu-desktop-lxde-vnc,然后安装 wps 后,使用 https://github.com/timxx/pywpsrpc 是没啥问题的,需要注意的是 wps 第一次打开后,需要同意 EULA,然后按照 https://github.com/timxx/pywpsrpc/issues/44#issuecomment-1032304847 中提到的改为 multi-module mode,然后就可以愉快使用了,但是对于无图形环境的 docker,似乎是连 wps 都无法启动

解决WPS无法启动的问题

wps安装之前需要安装一些依赖环境,这个后文给出完整的安装流程,此处主要解决 wps 安装完成后,启动无输出,直接闪退的问题

此处安装 https://github.com/timxx/pywpsrpc/wiki/Run-on-Server 配置了环境,但是wps依旧闪退

首先执行 whereis wps ,我们找到 wps 的执行文件路径,一般位于 /usr/bin/wps

然后我们编辑该文件

function run()
{
        oldPwd="${PWD}"
        if [ -e "${gInstallPath}/office6/${gApp}" ] ; then
                if [ 1 -eq ${gDaemon} ]; then
                        nohup ${gInstallPath}/office6/${gApp} ${gOpt} > /dev/null 2>&1 &
                elif [ 1 -eq ${gIsUrl} ]; then
                        { ${gInstallPath}/office6/${gApp}  ${gOptExt} ${gOpt} "${gFilePaths[@]}"; } > /dev/null 2>&1
                elif [ 1 -eq ${gIsFushion} ] && [ "$1" != "/prometheus" ]; then
                        { unset GIO_LAUNCHED_DESKTOP_FILE && ${gInstallPath}/office6/${gApp} /prometheus ${gOptExt} ${gOpt} "$@"; } > /dev/null 2>&1
                else
                        { ${gInstallPath}/office6/${gApp}  ${gOptExt} ${gOpt} "$@"; }
                fi
        else
                echo "${gApp} does not exist!"
        fi
}

将最后一个 else 的输出重定向去除,此时我们再运行 wps 就有报错输出了

dlopen /opt/kingsoft/wps-office/office6/libwpsmain.so failed , error: libxslt.so.1: cannot open shared object file: No such file or directory

然后我们运行下面的命令来解决他

apt-get install -y libxslt1.1

然后再运行wps即可,如果还是有缺失的问题,继续找补

或者可以直接运行 xvfb-run /opt/kingsoft/wps-office/office6/wps 来看报错

整体安装流程(for ubuntu)

apt-get install -y wget
# 下载 deb 安装包
wget https://wps-linux-personal.wpscdn.cn/wps/download/ep/Linux2019/11698/wps-office_11.1.0.11698_amd64.deb
# 防止 debconf (no usable dialog-like program 报错 ref:https://www.kaijia.me/2015/09/unable-to-initialize-frontend-dialog-issue-solved/
apt-get install -y dialog
# 安装 wps 所需依赖(安装wps时需要)
apt-get install -y bsdmainutils xdg-utils
# 安装 wps
apt-get install -y ./wps-office_11.1.0.11698_amd64.deb
# 安装运行 wps 时的依赖
apt-get install -y libxslt1.1 qtbase5-dev
# 安装虚拟显示器
apt-get install -y xvfb
# 使用 xvfb 来运行 wps
xvfb-run wps

但是此时如果你使用 pywpsrpc,还是启动不起来的

需要同意 wps 的 EULA 并且将 wps 改为多组件模式

# 将 wps 改为多组件模式
echo 'wpsoffice\Application%20Settings\AppComponentMode=prome_independ' >> ~/.config/Kingsoft/Office.conf
echo 'wpsoffice\Application%20Settings\AppComponentModeInstall=prome_independ' >> ~/.config/Kingsoft/Office.conf
# 同意 wps 的EULA
echo 'common\AcceptedEULA=true' >> ~/.config/Kingsoft/Office.conf

注意此时调用 pywpsrpc 其实还会出现一个错误

/tmp/64742_asso/assocheck.sh: line 18: gvfs-info: command not found
/tmp/64742_asso/assocheck.sh: line 19: gvfs-mime: command not found
/tmp/13013_desktop/desktopcheck.sh: line 23: gvfs-info: command not found
/tmp/13013_desktop/desktopcheck.sh: line 24: gvfs-mime: command not found

测试后感觉该错误不影响使用,如果在意的话可以通过 apt install gvfs-bin 来解决

封装的 Docker

为了更精简,qtbase5-dev 可替换为 libqt5gui5

但注意,导入使用 pywpsrpc 时可能会报错 ImportError: libQt5Xml.so.5: cannot open shared object file: No such file or directory ,还需要安装 libQt5Xml

apt-get install -y libqt5xml5

如果不差空间,使用 pywpsrpc 前更建议安装 qtbase5-dev

根据上面的测试,我做了一个镜像

该镜像只安装了 wps,并且做好了可使用的配置,可参照readme进行使用

https://github.com/akkuman/headless-wps

针对arm64的我也做了测试,结果发现实际上 wps 无法在 鲲鹏920+麒麟V10 上正常运行,当然,可能是因为这个系统内核的内存对齐比较特殊,连chrome也没法在这个系统上跑

# References

posted @ 2023-08-02 16:48  Akkuman  阅读(554)  评论(0编辑  收藏  举报