乐于分享
好东西不私藏

UniDesk桌面助手技术文档

UniDesk桌面助手技术文档

UniDesk 桌面助手是装在麒麟、统信终端电脑上的一个小工具,分两部分:

  • 客户端:装在每台办公电脑上。登录后能看到本机的硬件和系统信息,主界面是一个可以自己调整的卡片面板。
  • 服务端:装在一台内网服务器上。负责账号验证、保存每个人的面板布局、收集各台电脑上报的台账,管理员用浏览器打开管理台就能看。

服务端只用 Python 标准库,客户端只依赖 PyQt5,两边都能打成单个可执行文件,拷过去就跑,不用装 Python 环境。

部署

1 服务端

两种方式,选一种。

A:单文件(推荐)。在打包机上执行:

bash scripts/build_server_single.sh

得到 server/dist/unidesk-server,拷到服务器任意目录:

B:源码方式。服务器上有 Python 3 就行,不用装任何库:

python3 server.py--port 8800

开机自启。写个 systemd 单元 /etc/systemd/system/unidesk.service:

[Unit]Description=UniDesk sync serverAfter=network.target[Service]WorkingDirectory=/opt/unideskExecStart=/opt/unidesk/unidesk-server --port 8800Restart=alwaysRestartSec=5[Install]WantedBy=multi-user.target

然后 sudo systemctl enable --now unidesk

2 内置服务器地址

打包客户端之前,改 app/config.py 里的一行:

BUILTIN_SERVER="http://192.168.3.35:8800"

改成你们服务器的实际地址。这样打出来的客户端拿到手就能连,用户不用配任何东西。万一哪台机器要连别的服务器,登录窗口右下角有「服务器设置」,可以自己改,改完存在本机 ~/.officeassistant/config.json,比重装省事。

3 客户端打包和下发

打包机上需要 PyQt5 和 PyInstaller

sudoapt install-ypython3-pyqt5bashscripts/build_single_file.sh

得到 app/dist/UniDesk,大约几十 MB。把它放到服务端的 downloads/ 目录里,用户浏览器打开 http://服务器IP:8800/ 就能下载。下载完双击运行,没有安装过程。

也可以打 deb 包走开始菜单:

bashscripts/build_deb.shsudodpkg-iunidesk_1.3.0_all.deb

注意 CPU 架构。x86 机器上打出来的文件在 ARM(飞腾、鲲鹏)上跑不了,反过来也一样。有几种架构就打几次,文件名分开,比如 UniDesk-x86、UniDesk-arm64,下载页会全部列出来。

服务端管理台

浏览器打开 http://服务器IP:8800/admin,用 admin 登录。分三个页签。

1 用户管理

  • 新建账户:填用户名和密码(至少 6 位),创建完用户就能在客户端登录。
  • 重置密码:直接在行内输入新密码点重置。
  • 删除:删掉账号连同它的面板布局一起删。admin 账号删不掉,防止把自己锁外面。

客户端登录页也有注册按钮,但正式环境建议关掉这个口子,账号统一在管理台开。目前版本还留着,后续可以加个开关。

2 客户端台账

客户端每次登录后会把本机信息上报一次,包括 CPU、主板、显卡、硬盘、显示器、网卡、声卡、操作系统、激活状态、SN 号、MAC、内外网 IP。同一台机器重复登录只更新记录,不会重复登记——靠的是连接 ID(根据机器 DMI UUID 算出来的 12 位指纹)。

台账页能看到每台机器的主机名、登录账号、操作系统、CPU、内网 IP、SN、最近在线时间。一小时内上报过的显示绿点。

  • 备注:每台机器可以写备注,比如使用人、部门、房间号,写完点保存。备注会跟着 CSV 一起导出。
  • 详情:点进去看这台机器上报的完整信息。
  • 导出 CSV:页面右上角,导出的文件带 UTF-8 BOM,Excel 双击打开不会乱码。

3 台账报表

纯统计页,不用配什么,数据够了自己就有内容:

  • 上面一排数字卡片:设备总数、当前在线、24 小时活跃、操作系统种类。
  • 下面几张图:操作系统分布(麒麟、统信会自动归类)、CPU 架构分布、激活状态统计、每个账号登记了几台设备、按日期的新登记趋势。

机器多了以后,这个页能直接回答”我们有多少台麒麟、多少台统信、还有多少没激活”这类问题。

客户端使用

1 登录

两种登录方式,两个页签:

  • 账号密码:管理台开的账号直接登。输错了会提示。
  • 微信扫码:点「刷新二维码」,手机微信或者浏览器扫一下,手机上点确认,电脑这边两秒内自动进去。二维码三分钟过期,过期了再刷一次。

默认是演示模式:二维码里是个确认链接,手机浏览器打开选个账号就算登录。要接真的企业微信,在服务端设环境变量 WECOM_CORPID 和 WECOM_SECRET,二维码会自动切到企业微信的官方扫码地址。

登录窗口右下角「⚙ 服务器设置」:改服务器地址、测试连接、恢复默认。改完立刻生效,存在本机。

2 设备详情

登录后主界面默认四张卡片:硬件信息、系统信息、常用入口、时间日历。

硬件信息包括 CPU(型号、架构、核数、主频)、主板(厂商、型号、BIOS)、显卡、硬盘(型号+容量)、显示器(接口+分辨率)、网卡(驱动+MAC)、声卡。系统信息包括操作系统版本、内核、激活状态、连接 ID、SN 号、MAC、内外网 IP。

有两项在部分机器上需要 root 才能读到:SN 号和激活状态。碰到显示”需 root 权限”的,在终端上执行一次下面的配置就行,只放行这几条查询命令,不影响系统安全:

echo'%sudo ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode -s system-serial-number, /usr/sbin/dmidecode, /usr/sbin/kylin-activation, /usr/bin/kylin-activation, /usr/sbin/uos-license-ctl, /usr/bin/uos-license-ctl'|sudotee /etc/sudoers.d/unidesksudochmod 440 /etc/sudoers.d/unidesk

配完重启客户端,信息就出来了。不配也不影响别的功能。

3 自定义面板

点右上角「自定义面板」进入编辑状态:

  • 每张卡片右上角出现三个按钮:◀ 左移、▶ 右移、✕ 移除。
  • 左上角「+ 添加内容」可以把移除的卡片加回来。
  • 调完点「完成」,布局自动存到服务端。

布局是跟着账号走的。同一账号在别的电脑登录,面板摆法一模一样。这就是参数里说的”变更后数据会跟随当前登陆的账号”。

4 常用入口

卡片里预置了两个示例链接,点「+添加」填名称和网址就能加自己的常用系统,点条目用默认浏览器打开。这个列表存在本机 ~/.officeassistant/quicklinks.json,不跟账号漫游,每台机器可以不一样。