我正在寻找一种方法,在晚上自动将我的 Ubuntu 手机设置为静音模式,并在早上自动关闭静音模式(我总是忘记自己关闭它)。我认为这可以通过某种 cron 作业来完成,但为了做到这一点,我需要某种从命令行更改手机系统设置的方法,但我不知道该怎么做。
gsettings 和 dconf 似乎都有与静音模式相关的设置,但这些设置的值似乎与实际设置完全无关。使用 gsettings/dconf 更改设置不会反映在系统设置中,在系统设置中更改设置也不会反映在 gsettings/dconf 中。所以我正在寻找一种从命令行更改系统设置的方法。
谢谢
答案1
它似乎可以工作(使用 OTA-11,通过 SSH 连接):
amixer -q -D pulse sset Master toggle
答案2
解决方案
显然,dbus 可以用来更改设置。简而言之,以下 python 脚本在以 root 身份运行时会关闭静默模式:
import dbus
session = dbus.SystemBus()
proxy = session.get_object('org.freedesktop.Accounts','/org/freedesktop/Accounts/User#####')
interface = dbus.Interface(proxy,'org.freedesktop.DBus.Properties')
interface.Set('com.ubuntu.touch.AccountsService.Sound','SilentMode',False)
稍长一点的版本是:
qdbus --system
似乎列出了与系统 dbus 相关的所有服务。
qdbus --system org.freedesktop.Accounts
似乎列出了与该服务相关的路径。
qdbus --system org.freedesktop.Accounts /org/freedesktop/Accounts/User#####
似乎列出了与该路径(在本例中是特定用户的路径)相关的所有方法和属性。它具有以下相关方法:
method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
method QString org.freedesktop.DBus.Introspectable.Introspect()
这里,GetAll 和 Set 方法需要一个接口名称,我们可以通过调用 Introspect 函数来找到它,如下所示:
qdbus --system org.freedesktop.Accounts /org/freedesktop/Accounts/User##### org.freedesktop.DBus.Introspectable.Introspect
它将类似 xml 的文档打印到屏幕上,显示接口定义。获取静默模式值的操作如下:
qdbus --system org.freedesktop.Accounts /org/freedesktop/Accounts/User##### org.freedesktop.DBus.Properties.Get com.ubuntu.touch.AccountsService.Sound SilentMode
现在的问题是我无法弄清楚如何格式化它,以便qdbus
将参数解释为布尔值,这就是我最终使用 python 作为解决方法的原因。