Arch中WPS的安装

出自WPS For Linux

跳转到: 导航, 搜索

WPS for linux 除延续Windows版相同体验外,更加尊重Linux用户特定的使用习惯;深度兼容;自带方正字体集;在线模板和素材使文档创作更加轻松高效;还有更多爱上WPS的理由,等待你的发现……


用archlinux的朋友,请移步到Archlinux的官方WIKI查看相关内容,本页不再更新。


目录

准备工作

  • 安装base-devel软件组。
#pacman -S base-devel

注:shell提示符,本页中#表示此命令需要root权限,$只需要普通用户的权限。

  • 截至2012.11.30, WPS for linux 只发布32位版本,64位arch有必要检查multilib仓库是否已添加。

确保/etc/pacman.conf中反注释掉以下内容:

 [multilib]
 SigLevel = PackageRequired
 Include = /etc/pacman.d/mirrorlist

获取发布版本

目前wps for linux还处在内侧阶段,已发布Alpha 1~7七个版本。获得安装包请到WPS论坛linux版查看置顶帖等详细内容。
社区成员可直接在社区产品下载页面下载安装包。默认只有deb/rpm/tar三种格式。

创建PKGBUILD文件

Alpha7 版

  • PKGBUILD文件(使用的deb包)
pkgname=wps-office
pkgver=8.1.0.3552
_pkgver=$pkgver+wps+wpp+et~a7
pkgrel=1
pkgdesc='WPS Office is an office productivity suite. This is an ALPHA package. Use it at your own risk.'
arch=('i686' 'x86_64')
url='http://linux.wps.cn/'
license=('custom')
install=${pkgname}.install
source=("${pkgname}_${_pkgver}_i386.deb")
sha1sums=('dc506b6686a7a86385858ecef608f16fbc3d7232')
 
if [ "$CARCH" = "i686" ]; then
    depends=('fontconfig' 'glib2' 'libpng12' 'libsm' 'libxext' 'libxrender')
elif [ "$CARCH" = "x86_64" ]; then
    depends=('lib32-fontconfig' 'lib32-glib2' 'lib32-libpng12' 'lib32-libsm' 'lib32-libxext' 'lib32-libxrender')
fi
depends+=('desktop-file-utils' 'shared-mime-info' 'xdg-utils')

package() {
  cd "${srcdir}"
  tar azxvf data.tar.gz -C "${pkgdir}"

  ##Fix et menu
  echo 'Categories=Office;Spreadsheets;Qt;' >>$pkgdir/usr/share/applications/wps-office-et.desktop
}

依赖说明:'fontconfig' 'glib2' 'libpng12' 'libsm' 'libxext' 'libxrender' 这六个根据这里得到。 'desktop-file-utils' 'shared-mime-info' 'xdg-utils'是与install文件相关的。

  • install文件:wps-office.install
  1. 利用deb包的prerm,postrm,postinst编写,由于比较占版面,所以单独贴了一个页面wps-office.install
  2. 另一个短小的install文件,推荐。
post_install() {
  xdg-icon-resource forceupdate --theme hicolor
  update-desktop-database -q
  update-mime-database usr/share/mime > /dev/null 2>&1
  echo -n "Updating font cache... "
  mkfontscale /usr/share/fonts/wps-office
  mkfontdir /usr/share/fonts/wps-office
  fc-cache -f /usr/share/fonts/wps-office > /dev/null
  echo "done."
}

post_upgrade() {
  post_install $1
}

post_remove() {
  post_install $1
  rm -r /usr/share/fonts/wps-office
}

Alpha 1~6版

  • PKGBUILD文件

首先,根据版本修改以下三行,如a4的:

pkgver=8.1.0.3179
_pkgver=$pkgver+wps+wpp~a4
md5sums=('589c795212eed5eb44e20ee35cc02cba')

然后参考这里确定依赖。对于某些版本还有库的版本问题(如a1~a3的jpg图片显示,a5的libpng问题),可以通过aur添加依赖包,或者利用ARM来解决。

  • install文件与上一节中相同。

makepkg打包与安装

deb包、PKGBUILD、wps-office.install,放于同一工作目录,输入下面的命令打包wps-office:

$makepkg

如果需要的依赖不满足,makepkg 会输出一个警告,打包失败。makepkg可以自动调用 pacman 安装缺失的依赖关系,只需输入以下命令:

$ makepkg -s

当你用AUR解决依赖,而不是ARM时,你需要自己用makepkgyaourt编译安装相关依赖。
打包成功后,安装制作的二进制包。

#pacman -U wps-office-$pkgver-$pkgrel-$arch.pkg.tar.xz

$pkgver,$pkgrel,$arch,对应PKGBUILD文件中的值。一般用Tab补全。
想要打包好后自动安装,也可以在makepkg时加-i参数。

$makepkg -i

Tips

wps自带图标与系统图标主题不搭配

是不是感觉wps的图标有点小,或者是文件管理器中(如thunar)pptx文件的预览不见了,或者你更喜欢自己选择的图标主题,不想用wps自带的图标,咋办?
与此相关的文件是/usr/share/mime/packages/wps-office-{wpp,wps,et}.xml,/usr/share/mime/packages/freedesktop.org.xml(包含在软件包shared-mime-info中)

处理策略:wps自己的格式由wps-office-{wpp,wps,et}.xml定义,其他的用freedesktop.org.xml定义。同时修改desktop文件的MimeType项。
PKGBUILD文件package函数添加以下语句:

    ##et wpp wps 支持的MimeType
    _etMT="MimeType=application\/wps-office.et;application\/x-ett;application\/xslt+xml;application\/vnd.ms-excel;\
application\/vnd.openxmlformats-officedocument.spreadsheetml.template;\
application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"
    _wppMT="MimeType=application\/wps-office.dps;application\/wps-office.dpt;application\/vnd.ms-powerpoint;\
application\/vnd.openxmlformats-officedocument.presentationml.presentation;\
application\/vnd.openxmlformats-officedocument.presentationml.slideshow;\
application\/vnd.openxmlformats-officedocument.presentationml.template;"
    _wpsMT="MimeType=application\/wps-office.wps;application\/wps-office.wpt;\
application\/msword;application\/rtf;application\/msword-template;\
application\/vnd.openxmlformats-officedocument.wordprocessingml.template;\
application\/vnd.openxmlformats-officedocument.wordprocessingml.document;"

    ##mime
    sed -i '3,31d' $pkgdir/usr/share/mime/packages/wps-office-et.xml
    sed -i '3,36d' $pkgdir/usr/share/mime/packages/wps-office-wpp.xml
    sed -i '3,30d' $pkgdir/usr/share/mime/packages/wps-office-wps.xml

    ##desktop
    #_et
    sed -i "s/^MimeType.*$/$_etMT/" $pkgdir/usr/share/applications/wps-office-et.desktop
    #_wpp
    sed -i "s/^MimeType.*$/$_wppMT/" $pkgdir/usr/share/applications/wps-office-wpp.desktop
    #_wps
    sed -i "s/^MimeType.*$/$_wpsMT/" $pkgdir/usr/share/applications/wps-office-wps.desktop

zip模板压缩包乱码问题

请参考在线模板解压文件名乱码的解决

自带字体与拆包

关于自带字体版权请阅读WPS Office Linux版最终用户协议 十四.特别提示:第2条。打包、拆包都是个人行为。

这里给出一个示例,两个包:wps-office和字体ttf-fzfont。安装使用请注意与其他wps-office是否发生冲突。PKGBUILD如下:

# Maintainer: limser <echo bGltc2VyQHFxLmNvbQo=|base64 -d>
pkgbase="wpsoffice"
pkgname=('wps-office' 'ttf-fzfont')
pkgver=8.1.0.3552
_pkgver=$pkgver+wps+wpp+et~a7
pkgrel=1
license=('custom')
url='http://linux.wps.cn/'
pkgdesc='WPS Office is an office productivity suite. This is an ALPHA package. Use it at your own risk.'
source=("http://sorry/${pkgname}_${_pkgver}_i386.deb")
sha1sums=('dc506b6686a7a86385858ecef608f16fbc3d7232')
arch=('i686' 'x86_64')
if [ "$CARCH" = "i686" ]; then
    depends=('fontconfig' 'glib2' 'libpng12' 'libsm' 'libxext' 'libxrender')
elif [ "$CARCH" = "x86_64" ]; then
    depends=('lib32-fontconfig' 'lib32-glib2' 'lib32-libpng12' 'lib32-libsm' 'lib32-libxext' 'lib32-libxrender')
fi
depends+=('desktop-file-utils' 'shared-mime-info' 'xdg-utils')
#PKGEXT='.pkg.tar' ##less time

_etMT="MimeType=application\/wps-office.et;application\/x-ett;application\/xslt+xml;application\/vnd.ms-excel;\
application\/vnd.openxmlformats-officedocument.spreadsheetml.template;\
application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"
_wppMT="MimeType=application\/wps-office.dps;application\/wps-office.dpt;application\/vnd.ms-powerpoint;\
application\/vnd.openxmlformats-officedocument.presentationml.presentation;\
application\/vnd.openxmlformats-officedocument.presentationml.slideshow;\
application\/vnd.openxmlformats-officedocument.presentationml.template;"
_wpsMT="MimeType=application\/wps-office.wps;application\/wps-office.wpt;\
application\/msword;application\/rtf;application\/msword-template;\
application\/vnd.openxmlformats-officedocument.wordprocessingml.template;\
application\/vnd.openxmlformats-officedocument.wordprocessingml.document;"

package_wps-office () {
    optdepends=('ttf-fzfont: FangZheng fonts')
    install=wps-office.install

    cd "${srcdir}"
    tar zxvf data.tar.gz -C "${pkgdir}" --exclude=usr/share/fonts

    ##mime
    sed -i '3,31d' $pkgdir/usr/share/mime/packages/wps-office-et.xml
    sed -i '3,36d' $pkgdir/usr/share/mime/packages/wps-office-wpp.xml
    sed -i '3,30d' $pkgdir/usr/share/mime/packages/wps-office-wps.xml

    ##desktop with shared-mime-info wps-office-{et,wpp,wps}.xml
    #_et
    sed -i "s/^MimeType.*$/$_etMT/" $pkgdir/usr/share/applications/wps-office-et.desktop
    echo 'Categories=Office;Spreadsheets;Qt;' >>$pkgdir/usr/share/applications/wps-office-et.desktop
    #_wpp
    sed -i "s/^MimeType.*$/$_wppMT/" $pkgdir/usr/share/applications/wps-office-wpp.desktop
    #_wps
    sed -i "s/^MimeType.*$/$_wpsMT/" $pkgdir/usr/share/applications/wps-office-wps.desktop
}

package_ttf-fzfont() {
    pkgver=5.20
    pkgrel=1
    pkgdesc="FangZheng fonts separated from wps-office"
    arch=('any')
    url="http://www.foundertype.com/"
    depends=('fontconfig')
    install=ttf-fzfont.install

    cd "${srcdir}"
    tar zxv -C "${pkgdir}" -f data.tar.gz ./usr/share/fonts
}

对应的ttf-fzfont.install文件:

post_install() {
  echo -n "Updating font cache... "
  cd /usr/share/fonts/wps-office
  mkfontscale
  mkfontdir
  fc-cache -fs > /dev/null
}

post_upgrade() {
  post_install $1
}
 
post_remove() {
  if [ -d /usr/share/fonts/wps-office ] ; then
    rm -rf /usr/share/fonts/wps-office
  fi
  fc-cache -fs > /dev/null
}

wps-office.install文件:

icon_mime_hello() {
  xdg-icon-resource forceupdate --theme hicolor
  update-desktop-database -q
  update-mime-database usr/share/mime > /dev/null 2>&1
}

post_install() {
  icon_mime_hello $1
  if [ ! -d /usr/share/fonts/wps-office ] ; then
    echo " -> Make sure you have installed some ttf fonts."
  fi
}

post_upgrade() {
  post_install $1
}

post_remove() {
  icon_mime_hello $1
}

确定依赖包有哪些

本小节只是从库文件出发确定依赖包名称,至于库的版本太新或者太旧,不再讨论范围内(运行中缺什么搜什么)。

  • 找出安装包没有自带的so文件。解压缩data.tar.gz
 $cd ./data/opt/kingsoft/wps-office/office6
 $for so in $(ldd wps wpp et|awk '{print $1}'|sort|uniq);do [[ ! -f $so ]]&&echo $so; done >/tmp/wps.lost
  • 利用pkgfile(确保已经pacman -S pkgfile)寻找so文件包含在哪些包中。
$for so in $(cat /tmp/wps.lost);do echo "---$so---"; pkgfile $so; echo; done >/tmp/wps.so.result
$rm /tmp/wps.lost
  • 结合pactree生成某个软件包的依赖树,减少wps.so.result中包的数量。

如glib2

$pactree -u glib2|sort

ps:Alpha 5最后的结果:

depends=('glib2' 'fontconfig' 'libxrender' 'libpulse' 'sqlite' 'openssl') #i686
depends=('lib32-glib2' 'lib32-fontconfig' 'lib32-libxrender' 'lib32-libpulse' 'lib32-sqlite' 'lib32-openssl') #x86_64

Alpha 6结果:

depends=('fontconfig' 'glib2' 'libpng12' 'libsm' 'libxext' 'libxrender') #i686
depends=('lib32-fontconfig' 'lib32-glib2' 'lib32-libpng12' 'lib32-libsm' 'lib32-libxext' 'lib32-libxrender') #x86_64
  • 待续

相关页面

个人工具