如何从“错误:ld.so:对象‘/path/to/libgtk3-nocsd.so.0’因LD_PRELOAD而无法预加载(无法打开共享对象文件):被忽略”中恢复?

如何从“错误:ld.so:对象‘/path/to/libgtk3-nocsd.so.0’因LD_PRELOAD而无法预加载(无法打开共享对象文件):被忽略”中恢复?

为了防止 CustomerSideDecorations (CSD),我nocsd在 Xubuntu 22.04 中添加了: sudo apt -y install gtk3-nocsd

另外,我将此文件添加~/.xsessionrc到我的主目录:

# 2023-11-16 nach dem Vorschlag von https://github.com/PCMan/gtk3-nocsd
#            für  Debian-Linux-Varianten neu erzeugt, damit gtk3-nocsd wirkt:
  if [ -n "$STARTUP" ]; then
    BASESTARTUP=${STARTUP%% *}
    BASESTARTUP=${BASESTARTUP##*/}
    if [ "$BASESTARTUP" = x-session-manager ]; then
      BASESTARTUP=$(basename $(readlink /etc/alternatives/x-session-manager))
    fi
    if [ x"$BASESTARTUP" = x"${BASESTARTUP#gnome-session}" ] ; then
      export GTK_CSD=0
      STARTUP="env LD_PRELOAD=/path/to/libgtk3-nocsd.so.0 $STARTUP"
    fi
  fi

重新启动后,我注意到任务栏上有一个红色的循环感叹号通知,查看其上下文,我看到一个冗长的解释,告诉我存在需要恢复的依赖关系问题并且apt与之相关 ERROR: ld.so: object '/path/to/libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored. (相同的错误消息出现了几次,其中第一个“ERROR”一词的前两个字母丢失了。)我使用 Synaptic 进行搜索,nocsd得到了两个结果:

  1. gtk3-nocsd,显示了版本,但在最后一栏中却描述为disabled
  2. libgtk3-nocsd0:该条目的三栏内容均合理。

因此,我重新安装了nocsd第一个,使用 Synaptic。重新启动后,nocsd不再显示为已禁用。但错误通知仍然存在,基本上与之前相同。因此,我检查了libgtk3-nocsd.so.0系统中是否存在文件。我在三个地方找到了它,其中两个与有关snap。另一个是: /usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0

首先我检查了环境变量LD_PRELOAD,发现它是,这绝对是胡说八道。因此我 在 的末尾/path/to/libgtk3-nocsd.so.0添加了一行 。export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0/etc/bash.bashrc

重启后,我想检查这个环境变量。在我进入echo $LD_PRELOAD终端窗口之前,已经出现了一条错误消息 ERROR: ld.so: object '/path/to/libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored ,但随后echo $LD_PRELOAD显示,在 中的附加行bash.bashrc已成功定义LD_PRELOAD。当然,红色圆圈通知仍然在任务栏上,仍然给出与之前相同的解释。

接下来做什么?

答案1

LD_PRELOAD在替换 中的定义中的占位符后.xsessionrc,重启后错误消息不再出现。

该文件.xsessionrc现在内容如下

# ***************************** ~/.xsessionrc *****************************
# 2023-11-18 LD_PRELOAD muß den wirklichen absoluten Pfad zu libgtk3-nocsd.so.0 enthalten.
# 2023-11-16 nach dem Vorschlag von https://github.com/PCMan/gtk3-nocsd
#            für  Debian-Linux-Varianten neu erzeugt, damit gtk3-nocsd wirkt:
  if [ -n "$STARTUP" ]; then
    BASESTARTUP=${STARTUP%% *}
    BASESTARTUP=${BASESTARTUP##*/}
    if [ "$BASESTARTUP" = x-session-manager ]; then
      BASESTARTUP=$(basename $(readlink /etc/alternatives/x-session-manager))
    fi
    if [ x"$BASESTARTUP" = x"${BASESTARTUP#gnome-session}" ] ; then
      export GTK_CSD=0
      STARTUP="env LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 $STARTUP"
    fi
  fi

必须使用libgtk3-nocsd.so.0文件系统中文件的实际位置!

相关内容