Как восстановить `ERROR: ld.so: объект '/path/to/libgtk3-nocsd.so.0' из LD_PRELOAD не может быть предварительно загружен (невозможно открыть общий объектный файл): игнорируется.`?
Чтобы предотвратить использование CustomerSideDecorations (CSD), я добавил в свой 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 для поиска, который дал мне два результата:
-
gtk3-nocsd, там показывалась версия, но в последнем столбце она была описана какdisabled. -
libgtk3-nocsd0: Эта запись содержала разумное содержание во всех трех столбцах.
Поэтому я переустановил первую версию с помощью Synaptic. После перезагрузки,nocsdбольше не отображался как отключенный. Но уведомление об ошибке все еще присутствовало, по сути, давая мне то же самое, что и раньше. Поэтому я проверил наличие файлаlibgtk3-nocsd.so.0в моей системе. Я нашел это в трех местах, два из них связаны сsnap. Другой был:/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0.
Сначала я проверил переменную среды и обнаружил, что она/path/to/libgtk3-nocsd.so.0, что, конечно, ерунда. Поэтому я добавил строкуexport LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0до конца моего/etc/bash.bashrc.
После перезагрузки я хотел проверить эту переменную среды. Прежде чем я смог войти в окно терминала, уже появилось сообщение об ошибке.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 *****************************
# 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в файловой системе!