#10 Ubuntu 上钉钉不能启动的问题

2026-07-10

从官网下载的钉钉 deb 文件,安装之后竟然无法启动。

-> % ll ~/Downloads/com.alibabainc.dingtalk_8.1.0.6021101_amd64.deb
-rw-rw-r-- 1 catroll catroll 387M 2026-07-10 21:39:31 /home/catroll/Downloads/com.alibabainc.dingtalk_8.1.0.6021101_amd64.deb

-> % apt install ~/Downloads/com.alibabainc.dingtalk_8.1.0.6021101_amd64.deb

一边查看日志(journalctl --user -f),一边点击钉钉图标,可以看到以下错误日志:

7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361857]: ubuntu
7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361857]: ubuntu branch
7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361857]: preload_libs=./libgbm.so ./plugins/dtwebview/libcef.so
7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361873]: ERROR: ld.so: object './libgbm.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361873]: Run Main is_gpu=0 is_zygote=0 is_render=0 is_crashpad_handler=0 cmd : ./com.alibabainc.dingtalk
7月 10 21:49:27 eqr com.alibabainc.dingtalk.desktop[361873]: Load /opt/apps/com.alibabainc.dingtalk/files/8.1.0-Release.6021101//dingtalk_dll.so failed! Err=/opt/apps/com.alibabainc.dingtalk/files/8.1.0-Release.6021101//dingtalk_dll.so: cannot enable executable stack as shared object requires: Invalid argument
7月 10 21:49:27 eqr systemd[4607]: Started app-gnome-com.alibabainc.dingtalk-361857.scope - Application launched by gnome-shell.

经过 AI 的一番分析,结论是:

钉钉 deb 包依赖的 ELF 动态链接配置与当前系统环境不匹配。patchelf 修正了二进制的解释器、RPATH 或依赖库路径,使程序能正确加载运行时库之后就可以启动了。

sudo apt install -f patchelf
sudo patchelf --clear-execstack /opt/apps/com.alibabainc.dingtalk/files/8.1.0-Release.6021101/dingtalk_dll.so

#9 gdebi: Breaks existing package 'xxx' conflict

2026-07-07

我之前下载 deb 文件都用 gdebi 安装,但是今天升级 curosr 的时候报错:Breaks existing package 'cursor' conflict

-> % ll ~/Downloads/cursor_3.10.17_amd64.deb
-rw-rw-r-- 1 markjour markjour 187M 2026-07-07 03:35:12 /home/markjour/Downloads/cursor_3.10.17_amd64.deb

> % sudo gdebi ~/Downloads/cursor_3.10.17_amd64.deb
[sudo: authenticate] 密码:       
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Reading state information... Done
此软件包不可安装
Breaks existing package 'cursor' conflict: cursor ( )

因为 Cursor 打包的时候声明和已经安装的 cursor 冲突。

-> % apt info ~/Downloads/cursor_3.10.17_amd64.deb | cat
Package: cursor
Version: 3.10.17-1783235114
Priority: optional
Section: devel
Maintainer: Cursor <hi@cursor.com>
Installed-Size: 908 MB
Provides: cursor
Depends: ca-certificates, libasound2 (>= 1.0.17) | libasound2t64 (>= 1.0.17), libatk-bridge2.0-0 (>= 2.5.3) | libatk-bridge2.0-0t64 (>= 2.5.3), libatk1.0-0 (>= 2.11.90) | libatk1.0-0t64 (>= 2.11.90), libatspi2.0-0 (>= 2.9.90) | libatspi2.0-0t64 (>= 2.9.90), libc6 (>= 2.14), libc6 (>= 2.16), libc6 (>= 2.17), libc6 (>= 2.2.5), libc6 (>= 2.25), libc6 (>= 2.28), libcairo2 (>= 1.6.0) | libcairo2t64 (>= 1.6.0), libcups2 (>= 1.6.0) | libcups2t64 (>= 1.6.0), libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3, libdbus-1-3 (>= 1.9.14) | libdbus-1-3t64 (>= 1.9.14), libexpat1 (>= 2.1~beta3) | libexpat1t64 (>= 2.1~beta3), libgbm1 (>= 17.1.0~rc2) | libgbm1t64 (>= 17.1.0~rc2), libglib2.0-0 (>= 2.39.4) | libglib2.0-0t64 (>= 2.39.4), libgtk-3-0 (>= 3.9.10) | libgtk-3-0t64 (>= 3.9.10), libgtk-3-0 (>= 3.9.10) | libgtk-3-0t64 (>= 3.9.10) | libgtk-4-1 | libgtk-4-1t64, libnspr4 (>= 2:4.9-2~) | libnspr4t64 (>= 2:4.9-2~), libnss3 (>= 2:3.30) | libnss3t64 (>= 2:3.30), libnss3 (>= 3.26) | libnss3t64 (>= 3.26), libpango-1.0-0 (>= 1.14.0) | libpango-1.0-0t64 (>= 1.14.0), libudev1 (>= 183), libx11-6 | libx11-6t64, libx11-6 (>= 2:1.4.99.1) | libx11-6t64 (>= 2:1.4.99.1), libxcb1 (>= 1.9.2) | libxcb1t64 (>= 1.9.2), libxcomposite1 (>= 1:0.4.4-1) | libxcomposite1t64 (>= 1:0.4.4-1), libxdamage1 (>= 1:1.1) | libxdamage1t64 (>= 1:1.1), libxext6 | libxext6t64, libxfixes3 | libxfixes3t64, libxkbcommon0 (>= 0.5.0) | libxkbcommon0t64 (>= 0.5.0), libxkbfile1 (>= 1:1.1.0) | libxkbfile1t64 (>= 1:1.1.0), libxrandr2 | libxrandr2t64, xdg-utils (>= 1.0.2)
Recommends: libvulkan1
Conflicts: cursor
Replaces: cursor
Homepage: https://cursor.com
Download-Size: 195 MB
APT-Manual-Installed: yes
APT-Sources: /home/markjour/Downloads/cursor_3.10.17_amd64.deb
Description: The AI Code Editor.

于是改用 apt 安装成功:

-> % sudo apt install ~/Downloads/cursor_3.10.17_amd64.deb
注意,选中 'cursor' 而非 '/home/markjour/Downloads/cursor_3.10.17_amd64.deb'
将被升级:                
  cursor

摘要:
  升级:1,安装:0,卸载:0,不升级:0
  下载大小:0 B / 195 MB
  所需的空间:16.5 MB / 625 GB 可用

获取:1 /home/markjour/Downloads/cursor_3.10.17_amd64.deb cursor amd64 3.10.17-1783235114 [195 MB]
正在预设定软件包 ...       
(正在读取数据库 ... 系统当前共安装有 381608 个文件和目录。)
准备解压 .../cursor_3.10.17_amd64.deb  ...
正在解压 cursor (3.10.17-1783235114) 并覆盖 (3.5.17-1779246638) ...
正在设置 cursor (3.10.17-1783235114) ...
正在处理用于 desktop-file-utils (0.28-1build1) 的触发器 ...
正在处理用于 gnome-menus (3.38.1-1ubuntu1) 的触发器 ...
正在处理用于 shared-mime-info (2.4-5build3) 的触发器 ...
注意: 由于文件'/home/markjour/Downloads/cursor_3.10.17_amd64.deb'无法被用户'_apt'访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够)

#8 Ubuntu 26.04 上的 ls 变化(变成 Rust 版本)

2026-07-06
alias ll="LC_ALL=c ls -hlAF --group-directories-first"

ls 命令我经常会加上 --group-directories-first 参数,将文件夹排在前面。
PS:ls 默认就会按照字母顺序排序。
PS:ls 默认会忽略前导小数点,比如排序 a .b c 这样。我加上 LC_ALL=c 之后就会 .b a c 这样排序。

现在突然发现我的 ll 命令不按文件名称排序了,经过一番研究,原来是现在的 Ubuntu 26.04(我大概在两个月前从 25.04 升级过来)改用了 Rust 重构版本的 coreutils,也就是说一百多个命令都替换成了 Rust 版本。
然后这个版本在处理 --group-directories-first 参数的时候存在兼容问题,甚至可以说是 BUG:这个参数会导致排序规则失效(哪怕加上 Rust 版本新加的 --sort=name 也没有用)。

-> % apt-file search "/usr/bin/ls" | grep -E "bin/ls$"
coreutils-from-busybox: /usr/bin/ls
coreutils-from-gnu: /usr/bin/ls
coreutils-from-toybox: /usr/bin/ls
coreutils-from-uutils: /usr/bin/ls

-> % apt list --installed | grep coreutils
coreutils-from-uutils/resolute,now 0.0.0~ubuntu25 all [已安装,自动]
coreutils/resolute,now 9.5-1ubuntu2+0.0.0~ubuntu25 all [已安装,自动]
gnu-coreutils/resolute,now 9.7-3ubuntu2 amd64 [已安装,自动]
rust-coreutils/resolute,now 0.8.0-0ubuntu3 amd64 [已安装,自动]

关键是 coreutils-from-uutils 直接 Break coreutils-from-gnu,替换了相关文件,而不是通过软链接实现。
现在除非重新安装 coreutils 包覆盖回去,没有别的办法。
我不是 Linux 专家,所以要尊重社区的决定,没到万不得已,不能 Break 他们的设计。

那就只好这样了,暂时不用 --group-directories-first 参数。

#4 Ubuntu 快捷键

2020-03-31

全局

Win / Win + S 窗口概览
Win + A 程序搜索,或者 Win 双击
Win + D 显示桌面
Win + L 锁定窗口
Win + V / Win + M 打开日历和事件
Win + 数字 打开左侧菜单上的程序
Win + Left 将窗口移动到左侧
Win + Right 将窗口移动到右侧
Win + Up 最大化
Win + Down 还原
Win + Home 切换到第一个 Workspace
Win + PageUp 切换到上一个 Workspace
Win + PageDown 切换到上一个 Workspace
Alt + F2 运行一个命令
Alt + F4 关闭当前窗口
Alt + F6
Alt + F10 窗口最大化 / 还原
Ctrl + Alt + T 打开终端

Win + Space 切换输入法
Alt + Space 窗口菜单
Win + C 计算器 自定义
Win + F 文件浏览器 自定义

切换

Alt + Tab 切换窗口
Win + Tab 切换程序
Alt + ~ / Win + ~ 同一个程序的不通窗口切换

截图

屏幕截图并保存:PrntScr
Shift 选区截屏,加 Alt 窗口截屏,加 Ctrl 截屏到剪切板

PS:Ubuntu 22.04 之后,截图的逻辑调整了。
交互式截屏:PrntScr
Shift 屏幕截图并保存,同时复制到剪切板
Alt 窗口截屏并保存,同时复制到剪切板
Ctrl 没有任何效果

终端

Ctrl + Shift + N new window
Ctrl + Shift + Q quit window

Ctrl + Shift + T 打开新标签
Ctrl + Shift + W close tab

Ctrl + Shift + PageUp Tab 左移
Ctrl + Shift + PageDown Tab 右移

Ctrl + Shift + C 复制
Ctrl + Shift + V 粘贴

Ctrl + / 清空

其他

F9 打开 CopyQ 自定义

#3 Ubuntu 从 18.10 升级到 19.04 过程中出现的三个问题

2019-04-26

Ubuntu 19.04 与 4/19 发布,生命周期 9 个月。我提前两个月就定着日程在等,总是克制不住追新的冲动,哈哈。

好像主要就是:

  1. 内核升级到 5.0(4.x 升级到 5.0 其实没有什么大变化,主要是老人家高兴)
  2. GNOME 3.32,之前是 3.30
do-release-upgrade

由于审计过程中意外中断,导致出现了一些问题,这里做个记录。
声明:这些问题,是非正常升级流程出现的,不是说是 Ubuntu 的问题。

#2 apt 包管理系统

2017-12-25

搜索

apt search xxx

检索

apt list
apt list --installed
apt list --upgradable

升级

apt update
apt upgrade

apt-file

apt-file list youtube-dl
apt-file search bin/update-locale

其他

apt search
apt show
apt install
apt reinstall
apt remove
apt autoremove
apt full-upgrade
apt edit-sources
apt satisfy

apt-mark
apt-key
apt-config
apt-cache
apt-add-repository

#1 安装 Ubuntu 16.04 LTS 笔记

2016-05-17

重装系统,记录安装过程,留给日后重建同样的开发环境作参考。
其实还有好多细节没有记录,日后慢慢补充完整。