我发现了如何直接链接到 Jabber 会议服务器上的聊天室——这需要一些挖掘,在我确定自己做得对之前,我实际上查看了规范。我在这里确认了,所以我很确定我已经明白了。
然而,结果令人费解。如果我点击样式的链接,xmpp:dude@example.com我会在 example.com 上与用户“dude”进行新的聊天会话,正如预期的那样。如果我添加一个无意义的查询 ( xmpp:dude@example.com?foobar),它会被忽略,这就是规范所说的应该发生的。但是,如果我xmpp:room@conference.example.com?join像上面的链接一样使用,则不会发生任何事情。
我挖得更深一些,发现在我的(Linux)系统上,xmpp URI 是通过 处理的purple-url-handler,所以我放到终端上并手动运行它。结果是任何 xmpp URI 都运行良好,除了包含 ?join 查询的那个。?join 查询导致 dbus 崩溃,特别指向 dbus-message.c 的第 2356 行——谷歌搜索表明这可能是 dbus 不太优雅的方式,告诉我有人错误地使用了 dbus。
我是否正确制作了链接?这是操作系统还是应用程序问题?这是否适用于其他平台/浏览器/等?更重要的是,有什么简单的方法可以修复它吗?
我在 ssh 上使用依赖于 dbus 的工具几乎没有取得任何成功(例如pactl——pulseaudio 命令行界面——选择音频输出)。
我知道如何手动将会话的 DBUS 地址导出到DBUS_SESSION_BUS_ADDRESS,但仍然几乎所有应用程序都失败并显示connection refused at pa_context_new().
遗憾的是,这完全符合对 dbus、kdbus(和 systemd)的所有保留意见......
那么,要让依赖于 DBUS 的任何应用程序像在桌面会话中一样通过 ssh 运行,实际上需要哪些步骤?
有没有不依赖屏幕长脚本的非易碎、不易出错的方法来获取总线地址?
还需要什么 - 来自地址的 appart - 允许连接?
每次我的计算机在 Ubuntu 中连接到网络时,让脚本运行的好方法是什么?我会以某种方式使用 dbus 来做到这一点吗?
背景:当我在火车上时,我运行一个简短的 Perl 脚本来单击启动页面上的一个按钮。这样我就可以立即使用互联网,而无需手动访问毫无意义的网站。我的脚本是一个近乎完美的解决方案,但如果它可以在我连接到网络时自动运行,那就太完美了。
我已经设置了 WSL 2 (Ubuntu) 并在那里安装了 systemd (和 systemd-sysv)。之后,我跑了:
\n\nsudo mkdir -p /run/dbus\nsudo dbus-daemon --system\nsudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target\nRun Code Online (Sandbox Code Playgroud)\n\n安装之前systemd,我将ubuntu更新到18.10(使用sudo do-release-upgrade多次)
它工作了一段时间,但现在,它只能以普通用户身份工作。\n作为 root,我得到了
\n\nFailed to list units: Connection reset by peer\nRun Code Online (Sandbox Code Playgroud)\n\n在任何systemctl命令上。
因此,我可以查看服务的状态,但无法启用/禁用 dis 服务的启动或启动/停止它们。
\n\n我还可以在全新安装中复制它:
\n\n我从 Microsoft Store 安装了 Debian (WSL2)
\n\n我执行了以下命令:\n sudo apt-get update -y\n sudo apt-get install -y dbus-x11\n sudo apt-get install daemonize
\n\n然后,我wsl --shutdown在主机上执行并运行:
sudo …Run Code Online (Sandbox Code Playgroud) dbus ×4
linux ×1
pidgin ×1
ssh ×1
systemd ×1
uri ×1
windows-10 ×1
windows-subsystem-for-linux ×1
xmpp ×1