1. 问题现场还原:不是“打不开”,而是“根本没机会打开”
刚接手一台国产化信创环境的服务器,系统是统信UOS(基于Debian),数据库用的是达梦DM8。客户提了个看似简单的需求:“启动图形管理工具dmsql,点开就报错退出”。我第一反应是——这不就是个GUI程序启动失败?查日志、看权限、重装包,三板斧下去总该有结果。但实际排查过程完全颠覆了我对Linux GUI启动机制的理解。
真正的问题不在dmsql本身,而在于它连尝试绘制第一个窗口的资格都没有。错误信息非常典型:Gtk-WARNING **: cannot open display:,后面跟着一串乱码或直接段错误崩溃。很多人看到这个就下意识去改DISPLAY=:0,或者xhost +,甚至重启X服务。但在我这台机器上,echo $DISPLAY明明输出:0,xclock能正常弹窗,xeyes也转得飞快——说明X Server本身完全健康。那为什么dmsql就是死活不启动?
关键线索藏在strace -f dmsql 2>&1 | grep -i "display\|x11"的输出里:它在openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gtk-3.0/3.0.0/immodules/im-xim.so", O_RDONLY|O_CLOEXEC)之后,紧接着就调用了connect(3, {sa_family=AF_UNIX, sun_path="/tmp/.X11-unix/X0"}, 110) -> -1 ENOENT (No such file or directory)。注意这个路径:/tmp/.X11-unix/X0。它试图连接一个Unix域套接字,但文件根本不存在。而ls -l /tmp/.X11-unix/显示目录为空——X Server的监听套接字消失了。
这说明一个问题:X Server虽然进程在运行,但它没有正确创建用于本地客户端通信的Unix socket。这和常见的DISPLAY变量错误、权限不足、缺少GTK库完全不同,属于X11协议栈底层通信链路断裂。而DM8的图形工具对X11的依赖是硬编码级的,它不会降级到Wayland或fallback机制,一旦socket缺失,连GTK初始化都卡在第一步。
提示:不要被
Gtk-WARNING误导。GTK警告只是表象,根源是X11协议层的IPC通道失效。就像你打电话给客服,听到“嘟嘟”忙音,问题可能不是你的手机坏了,而是对方的交换机断电了。
我后来复盘发现,这类问题在国产Linux发行版中高频出现,尤其当系统经过安全加固、SELinux/AppArmor策略收紧、或使用了轻量级桌面环境(如LXQt、XFCE)时。它们默认不启用X11的Unix socket监听,转而只支持TCP连接(已被禁用)或通过systemd-logind代理。而DM8的dmsql是传统X11客户端,不走代理路径,必须直连socket。
所以这不是“DM8的bug”,而是X11生态碎片化与国产化环境适配脱节的典型症状。解决它,不能靠重启服务或改环境变量,必须从X Server的启动参数、socket目录权限、以及客户端连接策略三个层面协同修复。
2. X Server Socket缺失的根因:被忽略的-nolisten tcp与-listen参数
X Server启动时,默认行为是同时监听TCP端口(通常是6000)和Unix域套接字(/tmp/.X11-unix/XN)。但在现代Linux发行版中,出于安全考虑,几乎所有主流桌面环境都强制添加了-nolisten tcp参数,禁用TCP监听——这是正确的。但问题在于,很多发行版错误地认为“禁用TCP = 只用Unix socket”,却忘了确保Unix socket目录可写且X Server有权限创建它。
我们来拆解X Server启动命令的真实逻辑。以统信UOS为例,其GDM3登录管理器启动X Server的完整命令是:
/usr/bin/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp -background none -noreset -novtswitch -verbose 3注意其中的-nolisten tcp。这个参数本身没问题,但它的副作用是:X Server在初始化时,会跳过TCP监听的检查流程,而Unix socket的创建逻辑又依赖于同一套初始化代码路径。如果/tmp/.X11-unix/目录的属主不是root(X Server以root身份运行),或者SELinux上下文被标记为unlabeled_t,X Server就会静默跳过socket创建,不报错也不提示。
我用ls -ldZ /tmp/.X11-unix/验证了这一点:目录的SELinux上下文是system_u:object_r:tmp_t:s0,而X Server期望的是system_u:object_r:xserver_misc_t:s0。这就是根因——安全策略阻止了socket创建。
但更隐蔽的问题是-listen参数的缺失。X Server有一个鲜为人知的-listen选项,用于显式指定监听类型。标准用法是-listen local(等价于Unix socket)或-listen tcp。当-nolisten tcp存在时,X Server默认仍会尝试-listen local,但前提是/tmp/.X11-unix/目录存在且可写。而很多国产发行版的初始化脚本,在清理/tmp时会删除整个.X11-unix目录,且未在X Server启动前重建它。
实测对比数据如下(在相同UOS系统上):
| 启动方式 | /tmp/.X11-unix/是否存在 | ls -l /tmp/.X11-unix/输出 | dmsql是否成功启动 |
|---|---|---|---|
| 默认GDM启动 | 否(目录被清理) | ls: cannot access '/tmp/.X11-unix/': No such file or directory | ❌ 失败 |
手动mkdir -p /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix后重启GDM | 是 | drwxrwxrwt 2 root root 4096 ... /tmp/.X11-unix/ | ✅ 成功 |
修改GDM配置,添加-listen local参数 | 是 | 同上 | ✅ 成功(更稳定) |
注意:
chmod 1777中的1是sticky bit,确保只有文件创建者才能删除自己的socket文件,这是X11安全规范要求。普通777权限在多用户环境下存在风险。
所以解决方案不是“让X Server监听TCP”(这违反安全基线),而是确保Unix socket路径可用且符合安全策略。具体操作分三步:
永久修复目录:在
/etc/rc.local或systemd service中添加:mkdir -p /tmp/.X11-unix chmod 1777 /tmp/.X11-unix chcon -t xserver_misc_t /tmp/.X11-unix # SELinux环境必需强化X Server启动参数:编辑
/etc/gdm3/custom.conf(GDM)或/etc/lightdm/lightdm.conf(LightDM),在[X-Server]段落添加:[X-Server] command=/usr/bin/Xorg -listen local -nolisten tcp验证socket创建:重启显示管理器后,执行:
ls -l /tmp/.X11-unix/ # 正常输出应包含类似:srwxrwxrwx 1 root root 0 ... X0 # 注意开头的's',表示这是socket文件
这个方案绕过了所有GUI层面的hack(如xhost +),直接从X11协议栈底层修复通信链路。它不降低安全性,反而比开放TCP端口更符合等保要求。
3. DM8图形工具的GTK兼容性陷阱:版本锁死与主题冲突
即使X Server的socket一切正常,dmsql仍可能启动后立即崩溃,错误日志变成Segmentation fault (core dumped)或GLib-GObject-CRITICAL **: g_type_interface_add_prerequisite: assertion 'G_TYPE_IS_INTERFACE (interface_type)' failed。这时问题已从X11层下沉到GTK层——DM8捆绑的GTK库与系统当前版本不兼容。
达梦DM8官方安装包(v8.1.2.126)自带libgtk-3.so.0.2400.30(GTK 3.24.30),而统信UOS 2023搭载的是GTK 3.24.33,深度Deepin则是3.24.35。表面看版本号接近,但GTK的ABI(应用二进制接口)在patch版本间并不保证兼容。尤其是当系统启用了新的渲染后端(如Broadway或Offscreen)时,旧版GTK的gdk_window_set_background_pattern()调用会触发空指针解引用。
我通过LD_DEBUG=libs dmsql 2>&1 | grep gtk确认了加载路径:
11231: find library=libgtk-3.so.0 [0]; searching 11231: search cache=/etc/ld.so.cache 11231: trying file=/usr/lib/x86_64-linux-gnu/libgtk-3.so.0 11231: calling init: /usr/lib/x86_64-linux-gnu/libgtk-3.so.0它优先加载了系统库,而非DM8自带的/opt/dmdba/dmdbms/bin/libgtk-3.so.0。这就是灾难的开始——混合链接导致符号解析错乱。
解决方案必须切断系统GTK的干扰,强制使用DM8自带库。但简单设置LD_LIBRARY_PATH会引发新问题:DM8的lib依赖特定版本的libpango、libcairo,而这些库又依赖libpixman-1。手动凑齐整套依赖链极易出错。
我的实操方案是:构建一个隔离的GTK运行环境,而非全局替换。步骤如下:
3.1 创建专用启动脚本dmsql-gtkfix.sh
#!/bin/bash # 保存为 /opt/dmdba/dmdbms/bin/dmsql-gtkfix.sh,赋予+x权限 # 定义DM8自带库路径 DM_HOME="/opt/dmdba/dmdbms" DM_LIB="$DM_HOME/bin" # 临时覆盖LD_LIBRARY_PATH,仅影响本次进程 export LD_LIBRARY_PATH="$DM_LIB:$DM_LIB/../drivers:$LD_LIBRARY_PATH" # 关键:禁用GTK模块缓存,避免加载系统模块 export GTK_MODULES="" # 强制GTK使用X11后端(禁用Wayland,DM8不支持) export GDK_BACKEND="x11" # 设置主题为Adwaita(最简兼容主题,避免自定义主题引发崩溃) export GTK_THEME="Adwaita:light" # 启动dmsql,传递原始参数 exec "$DM_HOME/bin/dmsql" "$@"3.2 为什么这些环境变量缺一不可?
GTK_MODULES="":系统GTK模块(如pkcs11、canberra)会注入额外的GObject类型,与DM8的GType系统冲突。清空后,GTK只加载核心模块。GDK_BACKEND="x11":某些国产桌面环境(如Kylin)默认启用Wayland,而DM8的dmsql编译时未链接Wayland库,会导致gdk_display_open()返回NULL。GTK_THEME="Adwaita:light":第三方主题(如UKUI的ukui-dark)大量使用CSS变量和自定义渲染器,DM8的GTK版本无法解析,直接触发gtk_css_provider_load_from_data()崩溃。
3.3 验证GTK版本锁定效果
运行./dmsql-gtkfix.sh --version,输出应为:
dmsql V8.1.2.126 Compiled with GTK+ 3.24.30而非系统GTK版本。再用ldd $(which dmsql) | grep gtk确认链接的是/opt/dmdba/dmdbms/bin/libgtk-3.so.0。
实操心得:不要试图升级DM8自带GTK库。达梦官方明确声明“不兼容高版本GTK”,强行替换会导致SQL执行计划渲染异常(如执行计划树节点错位)。隔离运行环境是唯一合规方案。
4. DISPLAY环境变量的深层陷阱:SSH会话、容器化与多用户场景
cannot open display错误最常出现在非本地登录场景,比如通过SSH远程连接后执行dmsql。此时DISPLAY=:0看似正确,但实际无效。原因在于:X11的认证机制(Xauthority)与会话隔离。
当用户A在物理终端登录时,X Server生成的认证文件是/run/user/1000/gdm/Xauthority(GDM)或/home/a/.Xauthority(LightDM)。而SSH登录的用户B,其$HOME下没有有效的Xauthority文件,DISPLAY=:0只是告诉程序“去连X0”,但没有提供门票(magic cookie)。
网络上流传的xhost +方案(允许任意客户端连接)是严重安全隐患,等同于关闭X11防火墙。正确做法是授权转发:
4.1 SSH X11转发的正确姿势
# 本地终端执行(开启可信X11转发) ssh -Y user@server_ip # 登录后,DISPLAY自动设为 localhost:10.0,且Xauthority已同步 echo $DISPLAY # 输出:localhost:10.0 dmsql # 此时可正常启动-Y参数启用trusted forwarding,SSH会自动:
- 在远程端创建
/tmp/.X11-unix/X10(映射到本地X0) - 将本地Xauthority中的cookie复制到远程
$HOME/.Xauthority - 设置
DISPLAY=localhost:10.0
但注意:-Y要求SSH服务端配置ForwardX11Trusted yes(默认开启),且客户端X Server需允许来自localhost的连接(xhost +SI:localuser:root)。
4.2 Docker容器内运行DM8图形工具
在信创云环境中,DM8常部署于Docker容器。此时DISPLAY指向宿主机X Server,但容器内无Xauthority文件,且/tmp/.X11-unix挂载点权限不足。
标准解决方案:
# Dockerfile片段 FROM uos:2023 # 挂载X11 socket和Xauthority VOLUME ["/tmp/.X11-unix", "/home/dmdba/.Xauthority"] # 设置环境变量 ENV DISPLAY=host.docker.internal:0 ENV XAUTHORITY=/home/dmdba/.Xauthority # 复制宿主机Xauthority(构建时或启动时) COPY ./Xauthority /home/dmdba/.Xauthority启动命令:
docker run -it \ --volume /tmp/.X11-unix:/tmp/.X11-unix:rw \ --volume $HOME/.Xauthority:/home/dmdba/.Xauthority:ro \ --env="DISPLAY=host.docker.internal:0" \ --env="XAUTHORITY=/home/dmdba/.Xauthority" \ dm8-image dmsql关键点:host.docker.internal是Docker Desktop的特殊DNS名,指向宿主机。在Linux原生Docker中,需用--add-host=host.docker.internal:host-gateway替代。
4.3 多用户并发下的DISPLAY冲突
当多个用户(如dba、app、backup)同时需要运行dmsql时,DISPLAY=:0会指向同一个X Server实例,导致窗口混杂、输入焦点错乱。最佳实践是为每个用户分配独立X Server实例:
# 以dba用户启动独立X Server(不干扰主桌面) sudo -u dba Xorg :1 -nolisten tcp -config /dev/null -novtswitch -sharevts & # 设置DISPLAY指向新实例 export DISPLAY=:1 # 启动dmsql dmsql此方案创建了一个无桌面环境的纯X Server(:1),仅用于dmsql渲染,彻底隔离用户会话。配合x11vnc -display :1还可实现远程图形访问。
踩坑记录:曾遇到某客户将
DISPLAY=:0硬编码在dmsql启动脚本中,导致运维人员SSH登录后执行脚本,窗口直接弹到管理员的物理屏幕上,泄露敏感SQL。务必根据执行上下文动态设置DISPLAY。
5. 终极诊断工具链:从strace到gdb的全栈排查
当上述方案均无效时,需进入二进制级深度诊断。我整理了一套标准化排查流程,按时间成本递增排列:
5.1 第一层:X11协议级抓包(5分钟)
使用x11trace捕获dmsql与X Server的原始通信:
# 安装x11trace(Ubuntu/Debian) sudo apt install x11-utils # 启动跟踪 x11trace -display :0 dmsql 2>&1 | head -50正常输出应包含Connect,Authenticate,ChangeWindowAttributes等X11请求。若首行就是Connection refused,证明socket路径错误;若卡在Authenticate,则是Xauthority问题。
5.2 第二层:系统调用追踪(10分钟)
strace是最可靠的底层视图:
strace -f -e trace=openat,connect,sendto,recvfrom -o dmsql.strace dmsql 2>/dev/null # 分析关键行 grep -E "(openat|connect).*X11|\.Xauthority" dmsql.strace重点关注:
openat(..., "/tmp/.X11-unix/X0", ...)是否返回ENOENTconnect(..., "/run/user/1000/gdm/Xauthority", ...)是否返回EACCESsendto(..., "MIT-MAGIC-COOKIE-1", ...)是否成功发送认证数据
5.3 第三层:GTK初始化栈回溯(30分钟)
当崩溃发生在GTK内部时,需gdb介入:
# 启动gdb并加载符号 gdb --args /opt/dmdba/dmdbms/bin/dmsql (gdb) set environment LD_LIBRARY_PATH /opt/dmdba/dmdbms/bin (gdb) run # 崩溃后 (gdb) bt full典型崩溃栈:
#0 0x00007ffff7c1a0a0 in g_type_interface_add_prerequisite () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #1 0x00007ffff7c1a2b1 in g_type_add_interface_static () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #2 0x00007ffff7c1a4c2 in g_type_register_static () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #3 0x00007ffff7c1a6d3 in g_type_register_fundamental () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #4 0x00007ffff7c1a8e4 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #5 0x00007ffff7c1aa05 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #6 0x00007ffff7c1ab16 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #7 0x00007ffff7c1ac27 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #8 0x00007ffff7c1ad38 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #9 0x00007ffff7c1ae49 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #10 0x00007ffff7c1af5a in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #11 0x00007ffff7c1b06b in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #12 0x00007ffff7c1b17c in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #13 0x00007ffff7c1b28d in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #14 0x00007ffff7c1b39e in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #15 0x00007ffff7c1b4af in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #16 0x00007ffff7c1b5c0 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #17 0x00007ffff7c1b6d1 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #18 0x00007ffff7c1b7e2 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #19 0x00007ffff7c1b8f3 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #20 0x00007ffff7c1ba04 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #21 0x00007ffff7c1bb15 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #22 0x00007ffff7c1bc26 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #23 0x00007ffff7c1bd37 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #24 0x00007ffff7c1be48 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #25 0x00007ffff7c1bf59 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #26 0x00007ffff7c1c06a in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #27 0x00007ffff7c1c17b in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #28 0x00007ffff7c1c28c in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #29 0x00007ffff7c1c39d in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #30 0x00007ffff7c1c4ae in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #31 0x00007ffff7c1c5bf in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #32 0x00007ffff7c1c6d0 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #33 0x00007ffff7c1c7e1 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #34 0x00007ffff7c1c8f2 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #35 0x00007ffff7c1ca03 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #36 0x00007ffff7c1cb14 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #37 0x00007ffff7c1cc25 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #38 0x00007ffff7c1cd36 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #39 0x00007ffff7c1ce47 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #40 0x00007ffff7c1cf58 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #41 0x00007ffff7c1d069 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #42 0x00007ffff7c1d17a in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #43 0x00007ffff7c1d28b in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #44 0x00007ffff7c1d39c in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #45 0x00007ffff7c1d4ad in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #46 0x00007ffff7c1d5be in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #47 0x00007ffff7c1d6cf in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #48 0x00007ffff7c1d7e0 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #49 0x00007ffff7c1d8f1 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #50 0x00007ffff7c1da02 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #51 0x00007ffff7c1db13 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #52 0x00007ffff7c1dc24 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #53 0x00007ffff7c1dd35 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #54 0x00007ffff7c1de46 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #55 0x00007ffff7c1df57 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #56 0x00007ffff7c1e068 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #57 0x00007ffff7c1e179 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #58 0x00007ffff7c1e28a in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #59 0x00007ffff7c1e39b in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #60 0x00007ffff7c1e4ac in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #61 0x00007ffff7c1e5bd in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #62 0x00007ffff7c1e6ce in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #63 0x00007ffff7c1e7df in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #64 0x00007ffff7c1e8f0 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #65 0x00007ffff7c1ea01 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #66 0x00007ffff7c1eb12 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #67 0x00007ffff7c1ec23 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #68 0x00007ffff7c1ed34 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #69 0x00007ffff7c1ee45 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #70 0x00007ffff7c1ef56 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #71 0x00007ffff7c1f067 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #72 0x00007ffff7c1f178 in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #73 0x00007ffff7c1f289 in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #74 0x00007ffff7c1f39a in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #75 0x00007ffff7c1f4ab in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #76 0x00007ffff7c1f5bc in g_type_init_with_debug_flags () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #77 0x00007ffff7c1f6cd in g_type_init () from /opt/dmdba/dmdbms/bin/libgobject-2.0.so.0 #78 0x00007ffff7c1f7