AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1172225
Accepted
Nav
Nav
Asked: 2019-09-11 07:42:21 +0800 CST2019-09-11 07:42:21 +0800 CST 2019-09-11 07:42:21 +0800 CST

为什么从 ~/.profile 调用 gdbus 输出不起作用?

  • 772

如果我打开一个终端并运行以下脚本,它工作正常。调用中的值gdbus被写入lockScreenTest.txt文件。屏幕锁定时值为 true,屏幕解锁时值为 false。

#!/bin/bash
while true; do 
    echo "$(gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked)" >> lockScreenTest.txt
    sleep 2
    echo "called" >> lockScreenTest.txt
done

但是,如果我将此行添加./lockScreenCheck.sh&到~/.profile并重新启动计算机,则输出gdbus不会写入lockScreenTest.txt. 相反,仅写入以下输出:

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called

called  

gdbus为什么从 运行脚本时输出不可用~/.profile?
我正在对此进行调查,因为我编写了一个 Java 程序,该程序需要检查屏幕是否被锁定,并且我正在使用大致以下命令进行操作:

String command = "gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked";
p = Runtime.getRuntime().exec(command);
p.waitFor(); 

与 bash 脚本一样,如果我从带有 的终端运行 Java 程序,它也可以正常工作java -jar program.jar,但如果我从 调用它~/.profile,Java 程序会运行,但 gdbus 命令的输出是难以捉摸的。

bash java dbus .profile
  • 1 1 个回答
  • 209 Views

1 个回答

  • Voted
  1. Best Answer
    steeldriver
    2019-09-12T07:51:24+08:002019-09-12T07:51:24+08:00

    它可能会失败,因为gdbus无法建立与正在运行的会话总线的连接。

    请记住,这~/.profile是由登录 shell 提供的;显示管理器可能会在登录 shell 中调用用户的桌面会话,但您不应该指望它,即使它确实如此,会话也将是 shell 的子进程,而不是相反 - 环境诸如DBUS_SESSION_BUS_ADDRESS不会在父 shell 中设置的变量。

    对于需要连接到桌面会话总线的应用程序,您最好使用 GUI 的“启动应用程序”功能 - 例如,请参阅如何在登录时自动启动应用程序?

    • 1

相关问题

  • 同时复制到两个位置

  • 如何在 shell 脚本中创建选择菜单?

  • 从 bash 迁移到 zsh [关闭]

  • bashrc 还是 bash_profile?

  • 备份 bash 脚本未压缩其 tarball

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve