[problem help] gsettings为什么在命令行窗口可以执行,在sh脚本无法执行
Tofloor
poster avatar
2***[email protected]
deepin
2024-01-11 19:28
Author

gsettings命令为什么在命令行终端窗口可以执行,但是在sh脚本无法执行?

Reply Favorite View the author
All Replies
魔法师
deepin
2024-01-11 19:44
#1

gsettings 有几种情况

  1. 会话因素,如同 dbus 一样,虽然同在一个用户下,但登录的会话不一样时,也无法访问
  2. 第1点的场景有:ssh 登录,会话明显不同
  3. 第1点的场景有:systemd service 服务,纯 root 用户,是为服务级别会话,整个环境变量有个 USER PATH 加点 systemd 设置的进程变量就没了。

反面:

  1. 同在一个登录会话下,gsettings 控制当前登录用户的登录会话中所有运行的图形应用,dbus 的 session bus 也同在在该登录会话下
  2. 在 desktop 文件中,Exec=一个 shell 脚本,shell 脚本中写 gsettings 命令,双击,或launcher中点击打开的,这样是当前登录会话下执行的,没有任何问题。
  3. 写一个 shell 脚本,然后 ctrl+alt+t 打开终端应用,这样执行任何程序都是同一个登录会话下,可以执行 shell 脚本,gsettins 是正常的。
  4. 如果你在终端应用执行 sudo su ,你虽然在当前登录会话下,但你已经不是当前用户了。你相当于切换了工作者,虽然表面上是提升的权限,但所有者是 root ,你无法使用 gsettings。

以上,可能是我随便说的,具体的,请斟酌 pride

Reply View the author
root
deepin
2024-01-11 19:44
#2

因为 gsettings命令在安装时候已经 预先设置好可以执行所需的权限

tail

Reply View the author
魔法师
deepin
2024-01-11 19:47
#3
root

因为 gsettings命令在安装时候已经 预先设置好可以执行所需的权限

tail

太强了,我居然不知道

Reply View the author
neko
deepin
Ecological co-builder
2024-01-11 20:03
#4

sudo -u $USER env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus gsettings

试试加上环境变量

Reply View the author