【问题标题】:Create a custom lightdm greeter创建一个自定义 lightdm 迎宾器
【发布时间】:2021-01-06 14:10:32
【问题描述】:

我正在使用 conical 提供的 docs 创建自定义 LightDM-Greeter。问题是这些文档没有指定 lightdm 库的链接过程。

我正在运行Arch Linux x86_64。在使用pkg-config --cflags --libs lightdm 查询时,我没有得到任何结果,具体来说是Package lightdm was not found in the pkg-config search path

那么,我是否需要构建 src 然后静态链接到对象,或者有没有办法动态链接到 lightdm.so 之类的东西。

我使用 pacman -S lightdm 安装了 lightdm。

【问题讨论】:

  • 当您创建自己的欢迎程序时,我想问您是否知道如何将我的第二个笔记本电脑电池添加到我现在使用的欢迎程序中?我正在使用 slick-greeter。我的目标是克隆它并添加对我的第二块电池的支持

标签: c++ c linux gcc g++


【解决方案1】:

您不需要链接它(到显示管理器程序),一旦它成为共享可执行文件(这是您需要检查的),它就完全链接了。

要将其链接为共享可执行文件,您需要将-shared 参数添加到编译器(这使其成为共享可执行文件)并在链接时包含所有.o 文件。您还可以包含避免添加 C 运行时的选项(但我认为这在 --shared 选项中是隐含的)因为它是在运行时使用 dlopen(3) 加载的,您还应该指定 位置独立代码,在编译每个将链接在一起的.o 文件时带有选项-fPIC。最后一个选项生成可以在任何位置加载的目标代码,因为只有共享可执行文件才需要它,所以必须在编译时指定。因此,例如,如果您将 a.ob.o 作为欢迎程序的目标文件,则编译为:

cc -c -fPIC a.c b.c                 # compilation of a.c and b.c
cc --shared a.o b.o -o greeter.so   # linking to greeter.so

应该够了。

Greeter 通常作为共享库加载到正在使用的 XDM 显示管理器中,这样您就可以在它们之间切换,而不会在只使用一个时将所有这些都放在内存中的负担。您通常在配置中的某处指定要找到共享对象 si 的位置和方式,然后使用 dlopen(3) 函数加载和执行它。 (请参阅 xdm(8) 上的文档)并加载它并执行功能。您会注意到,因为登录小部件会在登录时显示。

出于测试目的,我应该使用 xdm(8) 作为 x 显示管理器,因为它允许指定如何以及在何处找到 xdisplay 问候语。 (并且它对程序员有很好的记录)然后尝试在您喜欢的显示管理器上使用它。 (可能有一些变化)很可能,它们都是兼容的。

【讨论】:

    【解决方案2】:

    也许是pkg-config --libs --cflags liblightdm-gobject-1

    【讨论】:

    • 不。 Package liblightdm-gobject was not found in the pkg-config search path
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2012-11-26
    • 2015-12-11
    相关资源
    最近更新 更多