标签: d-bus

用于在唤醒时运行 *X11* 脚本的电源管理挂钩

早些时候我问了一个类似的问题,但那个是关于运行系统级脚本的。

我有一个运行一系列xinput命令的脚本,以便在我的触摸板上启用两指滚动。每次计算机休眠和再次唤醒时都必须重新运行它,并且必须在 X11 会话中运行它。如何在计算机唤醒时触发脚本在我的 X11 桌面上运行?

PS 我怀疑有一种方法可以用 DBUS 做到这一点,但我对具体细节感到模糊。也许有更强 DBUS-fu 的人可以为我指明正确的方向。

linux ubuntu d-bus power-management x11

6
推荐指数
1
解决办法
590
查看次数

如何使用固定地址启动dbus?

该问题与此处此处描述的相同,但我此处看不到明确的解决方案。我的意思是我有同样的错误:

Failed to connect to socket /tmp/dbus-CwQMg2RxWx: Connection refused
Run Code Online (Sandbox Code Playgroud)

这是因为我在没有重新启动的情况下重新启动了我的 openbox 会话tmux。吉尔斯提到我应该:

开始dbus-daemon在你的X会话启动早明确,并给它像一个固定的地址unix:path=~/.dbus-$HOSTNAME-$DISPLAY

但我真的不知道把这个地址放在哪里。

当我检查系统中的 dbus 进程时,我得到如下信息:

$ ps -eo user,group,args | grep -i dbus
morfik   morfik   ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
morfik   morfik   dbus-launch --sh-syntax --exit-with-session openbox-session
morfik   morfik   /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
message+ message+ /usr/bin/dbus-daemon --system
morfik   morfik   grep --color=auto -i dbus
Run Code Online (Sandbox Code Playgroud)

现在我只使用starx命令来启动 X-server,我不再使用 lightdm。

更新#1

我终于设法用固定地址启动了 dbus。该行应如下所示:

unix:path=/home/morfik/.dbus/.dbus-morfikownia-0
Run Code Online (Sandbox Code Playgroud)

我无法使用 …

openbox d-bus

6
推荐指数
1
解决办法
8494
查看次数

在远程系统中运行 `dbus-send`

我正在尝试dbus-send在远程系统中运行,但不知何故我无法运行它。但是同样的dbus-send,如果我在本地系统中运行它,它工作正常。

命令

ssh remote@xx.xx.xx.xxx "dbus-send --print-reply --dest=service.name /object/path object.path.Service.method string:"XYZ""

如何dbus-send从远程系统运行命令?

系统信息

Linux 3.13.0-29-generic Ubuntu i686 GNU/Linux

linux ssh d-bus

6
推荐指数
1
解决办法
2303
查看次数

从他们的 cron 命令访问用户的会话 D-bus

需要什么才能让 cron 命令访问会话总线(如果它正在运行)?

它曾经对我有用,在 Debian Stretch(测试)上从切换 systemd 直到最近(可能是一两个月前)。奇怪的是,虽然我强烈怀疑这是由 PAM 配置控制的,但/etc/pam.d最近发生的唯一变化是添加了一些pam_selinuxpam.d/systemd-user.

那么我应该寻找什么?

cron d-bus

6
推荐指数
1
解决办法
3372
查看次数

通过 dbus 从终端注销的通用方法

我是新来的dbus,并且看到了根据桌面环境从终端注销的不同方式。但我很好奇有没有办法使用dbus消息从任何桌面环境中注销?

在 GNOME 上:

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
Run Code Online (Sandbox Code Playgroud)

在 KDE 上:

dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0
Run Code Online (Sandbox Code Playgroud)

是否有任何命令适用于每个桌面环境(例如使用 system dbus)?

linux d-bus systemd session

6
推荐指数
1
解决办法
3864
查看次数

由于 DBus 访问权限,无法访问 systemd --user

我正在尝试使用 systemd 单元设置服务帐户来管理实际服务 + 支持代码。但是,systemd 用户守护程序似乎无法正常工作。

$ systemctl --user
Failed to get D-Bus connection: Permission denied
Run Code Online (Sandbox Code Playgroud)

编辑:通过确保我有一个交互式 shell(使用 su - 而不是 su 切换到服务帐户),我取得了一些进展。这有帮助,但看起来我的 D-Bus 困境还没有结束:

$ systemctl --user
Failed to get D-Bus connection: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我正在尝试弄清楚我需要做些什么来确保该用户确实具有 dbus 访问权限。将它们添加到 dbus 组几乎没有什么好处。

$ groups
printing lp rpc dbus users chrony ipausers
Run Code Online (Sandbox Code Playgroud)

我正在运行 Fedora Core 23

fedora d-bus systemd

6
推荐指数
1
解决办法
2066
查看次数

在 Ubuntu 16.04 中禁用自动挂载

我正在创建一个安装了大量取证分析工具等的 Ubuntu 变体。但是我似乎根本不知道如何禁用自动安装。我希望它永远不要安装任何东西,我总是想手动安装一些东西。

我进行了一些搜索并发现了这一点:如何在 Ubuntu 16.04 中使用 gsettings 禁用设备自动挂载?

但是,如果我使用: gsettings set org.gnome.desktop.media-handling automount false

它仍然自动挂载。该线程还说了一些关于

这次失败的原因似乎是因为没有设置环境变量,特别是 $DBUS_SESSION_BUS_ADDRESS。

现在我知道这最后一部分是什么意思,任何人都愿意解释或有任何其他解决方案来完全禁用自动安装 cd/usb/sata 等。

ubuntu automounting d-bus mount

6
推荐指数
1
解决办法
8071
查看次数

如何防止 kdeconnectd 自动启动?

这些不起作用:sudo update-rc.d kdeconnectd disable sudo systemctl disable kdeconnectd.service

没有它的脚本/etc/init.d//usr/share/dbus-1/services/org.kde.kdeconnect.service文件只Exec=/usr/lib/x86_64-linux-gnu/libexec/kdeconnectd设置了

sysv-rc-confrcconf并且bum不列出 kdeconnect。

/etc/xdg/autostart/kdeconnectd.desktop看起来像这样:

[Desktop Entry]
Type=Application
Exec=/usr/lib/x86_64-linux-gnu/libexec/kdeconnectd
X-KDE-StartupNotify=false
X-KDE-autostart-phase=0
X-GNOME-Autostart-enabled=false
OnlyShowIn=KDE;GNOME;Unity;XFCE;
NoDisplay=true
Run Code Online (Sandbox Code Playgroud)

(Kdeconnectd 在运行时始终打开端口 1716。)它不仅在启动时自动启动,而且在进程结束后一段时间(我没有打开它)也会自动启动。

我正在运行 Debian 9/KDE。

更新:这可能与 Dolphin 文件资源管理器的问题有关:当运行 dolphin 并只是四处导航或等待一段时间后,我得到了我在此处报告的输出

org.kde.kcoreaddons: Error loading plugin "akregatorplugin" "The shared library was not found." 
Plugin search paths are ("/usr/lib/x86_64-linux-gnu/qt5/plugins", "/usr/bin") 
The environment variable QT_PLUGIN_PATH might be not correctly set
error activating kdeconnectd: QDBusError("", "") …
Run Code Online (Sandbox Code Playgroud)

kde debian d-bus autostart kde-connect

6
推荐指数
1
解决办法
7797
查看次数

设置 docker 容器以通过 d-bus 与主机通信

我正在创建两个应用程序,master 和 slave,它们通过 d-bus 进行通信。我的应用程序在同一主机上运行时按预期工作。
现在我想将从属应用程序移动到 docker 容器,但在主机和容器之间共享 d-bus 会话时遇到问题。这是我的 Dockerfile:

从 i386/ubuntu:16.04

音量/运行/用户/1000/
ENV DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

运行 apt-get 更新
运行 apt-get upgrade -y
运行 apt-get install -y dbus

#RUN apt-get install -y libnotify-bin
#RUN apt-get install -y dbus-x11

运行 adduser -u 1000 myuser

#COPY dbus.conf /etc/dbus-1/session.d/

用户 1000:1000
入口点 ["dbus-daemon", "--session", "--print-address"]

/run/user/1000/bus 是我的 DBUS_SESSION_BUS_ADDRESS 变量的值。

我创建容器

 docker create --mount type=bind,source=/run/user/1000/bus,target=/run/user/1000/bus mycontainer

/run/user/1000/bus 在容器内是可见的,但是当容器启动时它会打印地址

unix:abstract=/tmp/dbus-iXrYzptYOX,guid=78a790f0f6a4387a39ac3d505da478a3
和我的应用程序无法通信。

如果我将 dbus.conf 添加到容器中的 /etc/dbus-1/session.d/ 并覆盖

 <listen>unix:path=/run/user/1000/bus</listen> 
我收到消息“无法启动消息总线:无法绑定套接字“/run/user/1000/bus”:地址已在使用中”

我不确定我是否应该在 docker 中启动 dbus-daemon。
我怎样才能使这项工作?

d-bus docker

6
推荐指数
1
解决办法
5729
查看次数

是否可以使用 D-Bus 控制 Gnome Shell 中的窗口管理?

我希望能够使用 D-Bus 以编程方式与 Gnome 3 中的窗口管理器进行通信。我想完成的任务是:

  • 监听新窗口
  • 获取窗口标志(例如跳过寻呼机标志)
  • 获取 X 窗口 ID
  • 最大化、最小化窗口
  • 升高、降低车窗
  • 隐藏窗口 目的是创建一个类似任务栏的应用程序。

我知道xdotoolswmctrl等工具,但这些都是非常彻底的工具:没有侦听器来查找新窗口是否已实例化/映射,拿铁咖啡与窗口标题字符串一起使用。

我也尝试过使用 python-xlib,但是缺乏文档或技术性文档过多使得实现任何目标都非常困难。

D-Bus 似乎适合此类操作。我可以使用 D-Bus 来做到这一点吗?有没有办法使用 Python 来做到这一点?您能提供一些例子吗?

gnome window-manager desktop-environment d-bus x11

5
推荐指数
1
解决办法
1083
查看次数