Команда запуска в режиме ожидания / активной

Только исправление

Эта команда показывает сообщение об ошибке «ERROR: extract: путь должен быть абсолютным»:

./cuda_6.5.14_linux_64.run -extract=~/Downloads/nvidia_installers

Ошибка не помогает - программа тоже смущен уже. Вы уже знаете, что ошибка происходит от ~, поскольку она работает с $HOME.

Проблема: ~ заменяется только в начале слова.

Например, это работает с тильдой:

echo -extract ~/Downloads

Если вам нужен синтаксис опции с =, то использование $ HOME вместо ~ является самым чистым решением ;

echo -extract=$HOME/Downloads

Практика

Что вы должны знать:

Существуют особые случаи, когда ~ get расширяется, если не в начале слова: как часть присваивания переменной, непосредственно после =. Это, конечно, запутывает.

Другой важный частный случай для использования с такими переменными, как PATH. В переменных присваивания ~ также расширяется после :, как и после первого =.

$ dir=~ sh -c 'echo D2: $dir'
D2: /home/user
$ sh -c 'echo D2: $dir' dir=~
D2: 
$ echo Dir: $dir
Dir:
$ dir=~; sh -c 'echo D2: $dir'
D2: 
$ echo Dir: $dir
Dir: /home/user
$ sh -c 'echo D2: $dir'; d3=~
D2: 
$ echo d3: $d3
d3: /home/user

Значение тильды

В оболочке [ f16], тильда, на самом деле не путь.

Это что-то вроде сокращения или сокращения, предоставленного оболочкой. Он не может быть использован как путь вообще, оболочка «расширяет» его до пути только в очень особых местах. И даже если он расширен, это может быть что-то другое, чем домашний каталог.

Он расширяется только в начале слова или в присваивании переменной после : или =. Он расширяется только в том случае, если он не внутри кавычек. Он расширяется только до $HOME если в слове нет дополнительных символов до /

Проблема в командной строке

В соответствии с этим проблема в вашей команде заключается в том, что тильда в

-extract=~/Downloads/nvidia_installers

не расширяется, потому что это не один из перечисленных случаев. Это все.

Решение может состоять в том, чтобы сделать тильду первым неупорядоченным символом слова без какого-либо другого символа перед следующим / - это именно то, что вы получаете, когда используете параметр с space перед аргументом опции:

-extract ~/Downloads/nvidia_installers

Другим решением было бы использовать $HOME. В сценарии это обычно лучший выбор.

-extract=$HOME/Downloads/nvidia_installers

Сообщение об ошибке

Но как сообщение об ошибке "ERROR: extract: path must be absolute."?

Мы знаем, что тильда не расширилась. Это означает, что программа получила текст аргумента, включая ~, но без /home/auser в качестве пути. Этот путь ~/Downloads/nvidia_installers - но теперь нет оболочки, поэтому тильда не имеет особого значения. Это просто обычное имя каталога. И как любой другой путь формы foo/bar/baz, это относительный путь

Другие используют

Если после ~ есть символы, как в ~alice - с все другие правила выше применения - и есть имена пользователей alice, которые вместо этого добавляются в домашний каталог alice, скажем home/alice. Кроме того, если вы bob , ~ будет расширяться до /home/bob, а ~bob будет расширяться до того же самого.

Вариант ~+ расширяется до текущего каталога, $PWD

Чтобы ссылаться на предыдущий каталог, где вы были до последнего cd, вы можете использовать ~-, который расширен до $OLDPWD.

Если вы используете pushd и popd вместо cd вы уже знаете, что к стеку каталога можно получить доступ, например ~-2.

Подробности

Все случаи, когда ~ расширяются до пути, рукояткой оболочки. Для других программ ~ является обычным символом имени файла.

Для помещены оболочкой внутри оболочки, вот соответствующий раздел man bash. Обратите внимание, что замена ~ на $HOME - это только один частный случай многие случаи: «Если это имя для входа является пустой строкой, тильда заменяется значением параметра оболочки HOME.»:

Tilde Expansion
    If a word begins with an unquoted tilde character (`~'), all of the charac‐
    ters  preceding the first unquoted slash (or all characters, if there is no
    unquoted slash) are considered a tilde-prefix.  If none of  the  characters
    in  the tilde-prefix are quoted, the characters in the tilde-prefix follow‐
    ing the tilde are treated as a possible login name.  If this login name  is
    the  null string, the tilde is replaced with the value of the shell parame‐
    ter HOME.  If HOME is unset, the home directory of the user  executing  the
    shell is substituted instead.  Otherwise, the tilde-prefix is replaced with
    the home directory associated with the specified login name.

    If the tilde-prefix is a `~+', the value of the shell variable PWD replaces
    the  tilde-prefix.   If  the tilde-prefix is a `~-', the value of the shell
    variable OLDPWD, if it is set, is substituted.  If the characters following
    the tilde in the tilde-prefix consist of a number N, optionally prefixed by
    a `+' or a `-', the tilde-prefix is replaced with the corresponding element
    from  the  directory  stack,  as  it would be displayed by the dirs builtin
    invoked with the tilde-prefix as an argument.  If the characters  following
    the  tilde in the tilde-prefix consist of a number without a leading `+' or
    `-', `+' is assumed.

    If the login name is invalid, or the tilde expansion  fails,  the  word  is
    unchanged.

    Each variable assignment is checked for unquoted tilde-prefixes immediately
    following a : or the first =.  In these cases, tilde expansion is also per‐
    formed.   Consequently, one may use filenames with tildes in assignments to
    PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.
2
задан 10 January 2018 в 14:05

6 ответов

Решение, с которым я столкнулся, - это события DBUS.

Сначала я запускал dbus-monitor, чтобы увидеть, какие события вызывают, когда монитор идет / просыпается от сна:

signal time=1515274499.244468 sender=org.freedesktop.DBus -> destination=:1.394 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.394"
signal time=1515274499.244502 sender=org.freedesktop.DBus -> destination=:1.394 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
string ":1.394"
signal time=1515274559.337480 sender=:1.6 -> destination=:1.2 serial=29015 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 440
signal time=1515274559.337878 sender=:1.2 -> destination=(null destination) serial=3288 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged
uint32 3
signal time=1515274559.338267 sender=:1.2 -> destination=(null destination) serial=3290 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.SessionManager.Presence"
array [
dict entry(
string "status"
variant uint32 3
)
]
array [
]
signal time=1515274569.389778 sender=:1.6 -> destination=(null destination) serial=29018 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "auto-move-windows@gnome-shell-extensions.gcampax.github.com"
int32 2
string ""
signal time=1515274569.398929 sender=:1.6 -> destination=(null destination) serial=29019 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "clipboard-indicator@tudmotu.com"
int32 2
string ""
signal time=1515274569.399633 sender=org.freedesktop.DBus -> destination=:1.6 serial=5195 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
string "org.kde.StatusNotifierWatcher"
signal time=1515274569.399660 sender=org.freedesktop.DBus -> destination=(null destination) serial=850 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string "org.kde.StatusNotifierWatcher"
string ":1.6"
string ""
signal time=1515274569.404274 sender=:1.6 -> destination=(null destination) serial=29022 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "ubuntu-appindicators@ubuntu.com"
int32 2
string ""
signal time=1515274569.442137 sender=:1.6 -> destination=(null destination) serial=29025 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "ubuntu-dock@ubuntu.com"
int32 2
string ""
signal time=1515274569.455035 sender=:1.6 -> destination=(null destination) serial=29027 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
signal time=1515274569.657300 sender=:1.6 -> destination=:1.42 serial=29037 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 491
signal time=1515274569.657404 sender=:1.6 -> destination=(null destination) serial=29038 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.Mutter.DisplayConfig"
array [
dict entry(
string "PowerSaveMode"
variant int32 3
)
]
array [
]
signal time=1515276608.243100 sender=:1.6 -> destination=:1.2 serial=29039 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 489
signal time=1515276608.243573 sender=:1.2 -> destination=(null destination) serial=3291 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged
uint32 0
signal time=1515276608.243843 sender=:1.2 -> destination=(null destination) serial=3292 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.SessionManager.Presence"
array [
dict entry(
string "status"
variant uint32 0
)
]
array [
]
signal time=1515276608.244032 sender=:1.6 -> destination=:1.42 serial=29040 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 494
signal time=1515276608.270459 sender=:1.6 -> destination=(null destination) serial=29042 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.Mutter.DisplayConfig"
array [
dict entry(
string "PowerSaveMode"
variant int32 0
)
]
array [
]
signal time=1515276623.523917 sender=:1.6 -> destination=:1.42 serial=29043 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 491
signal time=1515276623.554451 sender=:1.6 -> destination=(null destination) serial=29047 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.Mutter.DisplayConfig"
array [
dict entry(
string "PowerSaveMode"
variant int32 3
)
]
array [
]
signal time=1515276668.529836 sender=:1.6 -> destination=:1.2 serial=29048 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 440
signal time=1515276668.530236 sender=:1.2 -> destination=(null destination) serial=3293 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged
uint32 3
signal time=1515276668.530565 sender=:1.2 -> destination=(null destination) serial=3295 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.SessionManager.Presence"
array [
dict entry(
string "status"
variant uint32 3
)
]
array [
]
signal time=1515279067.394398 sender=:1.6 -> destination=:1.2 serial=29051 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 498
signal time=1515279067.394982 sender=:1.2 -> destination=(null destination) serial=3296 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged
uint32 0
signal time=1515279067.395139 sender=:1.2 -> destination=(null destination) serial=3297 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.SessionManager.Presence"
array [
dict entry(
string "status"
variant uint32 0
)
]
array [
]
signal time=1515279067.395662 sender=:1.6 -> destination=:1.42 serial=29052 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired
uint32 496
signal time=1515279067.414904 sender=:1.6 -> destination=(null destination) serial=29054 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.gnome.Mutter.DisplayConfig"
array [
dict entry(
string "PowerSaveMode"
variant int32 0
)
]
array [
]
signal time=1515279076.828255 sender=:1.6 -> destination=(null destination) serial=29063 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "ubuntu-dock@ubuntu.com"
int32 1
string ""
signal time=1515279076.829775 sender=org.freedesktop.DBus -> destination=(null destination) serial=851 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string "org.kde.StatusNotifierWatcher"
string ""
string ":1.6"
signal time=1515279076.829812 sender=org.freedesktop.DBus -> destination=:1.6 serial=5215 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string "org.kde.StatusNotifierWatcher"
signal time=1515279076.829824 sender=:1.6 -> destination=(null destination) serial=29066 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "ubuntu-appindicators@ubuntu.com"
int32 1
string ""
signal time=1515279076.841923 sender=:1.6 -> destination=(null destination) serial=29067 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "clipboard-indicator@tudmotu.com"
int32 1
string ""
signal time=1515279076.844396 sender=:1.6 -> destination=(null destination) serial=29068 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged
string "auto-move-windows@gnome-shell-extensions.gcampax.github.com"
int32 1
string ""
signal time=1515279076.851323 sender=:1.6 -> destination=(null destination) serial=29069 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
signal time=1515279076.896958 sender=:1.6 -> destination=(null destination) serial=29218 path=/StatusNotifierWatcher; interface=org.kde.StatusNotifierWatcher; member=StatusNotifierItemRegistered
string "/"
signal time=1515279076.921110 sender=:1.38 -> destination=(null destination) serial=2735 path=/org/gnome/evolution/dataserver/CalendarView/1887/93; interface=org.gnome.evolution.dataserver.CalendarView; member=complete
array [
string ""
string ""
]
signal time=1515279076.924727 sender=:1.34 -> destination=(null destination) serial=2701 path=/org/gnome/evolution/dataserver/CalendarView/1870/92; interface=org.gnome.evolution.dataserver.CalendarView; member=complete
array [
string ""
string ""
]
signal time=1515279077.686970 sender=:1.6 -> destination=(null destination) serial=30014 path=/StatusNotifierWatcher; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
string "org.kde.StatusNotifierWatcher"
array [
dict entry(
string "RegisteredStatusNotifierItems"
variant array [
string ":1.66/org/ayatana/NotificationItem/software_update_available"
]
)
]
array [

Я сначала попытался перейти на org.gnome.Mutter.IdleMonitor, но значения uint32 постоянно увеличивались, не зная почему?

Я установил с StatusChanged, вот окончательный скрипт:

#!/bin/bash
# Turn keyboard backlight on/off using https://github.com/MatMoul/g810-led

g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot)

dbus-monitor --session "type=signal,interface=org.gnome.SessionManager.Presence,member=StatusChanged" |
  while read x; do
      case "$x" in
        *"uint32 3"*) g413-led -a 000000;;
        *"uint32 0"*) g413-led -a FFFFFF;;
      esac
  done
[d4 ] Заставки также могут работать:

g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot)

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
  while read x; do
      case "$x" in
        *"boolean true"*) g413-led -a 000000;;
        *"boolean false"*) g413-led -a FFFFFF;;
      esac
  done

Конечно, вы можете поместить любую команду. Преимущество первого скрипта по сравнению с этим состоит в том, что он загорается клавиатурой перед входом пользователя, что упрощает ввод пароля.

Единственным недостатком является то, что клавиатура загорается после входа пользователя, а не нажатия клавиши, но я могу жить с этим.

Я экспериментировал с:

dbus-monitor --session "type='signal',interface='org.freedesktop.DBus.Properties',path='/org/gnome/Mutter/DisplayConfig'" | grep 'variant int32' |
  while read x; do
      case "$x" in
        *"variant int32 3"*) g413-led -a 000000;;
        *"variant int32 0"*) g413-led -a FFFFFF;;
      esac
  done

, но по какой-то причине он не работал, возможно, проблема grep.

2
ответ дан 22 May 2018 в 15:44

Решение, с которым я столкнулся, - это события DBUS.

Сначала я запускал dbus-monitor, чтобы увидеть, какие события вызывают, когда монитор идет / просыпается от сна:

signal time=1515274499.244468 sender=org.freedesktop.DBus -> destination=:1.394 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.394" signal time=1515274499.244502 sender=org.freedesktop.DBus -> destination=:1.394 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string ":1.394" signal time=1515274559.337480 sender=:1.6 -> destination=:1.2 serial=29015 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 440 signal time=1515274559.337878 sender=:1.2 -> destination=(null destination) serial=3288 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 3 signal time=1515274559.338267 sender=:1.2 -> destination=(null destination) serial=3290 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 3 ) ] array [ ] signal time=1515274569.389778 sender=:1.6 -> destination=(null destination) serial=29018 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "auto-move-windows@gnome-shell-extensions.gcampax.github.com" int32 2 string "" signal time=1515274569.398929 sender=:1.6 -> destination=(null destination) serial=29019 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "clipboard-indicator@tudmotu.com" int32 2 string "" signal time=1515274569.399633 sender=org.freedesktop.DBus -> destination=:1.6 serial=5195 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string "org.kde.StatusNotifierWatcher" signal time=1515274569.399660 sender=org.freedesktop.DBus -> destination=(null destination) serial=850 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged string "org.kde.StatusNotifierWatcher" string ":1.6" string "" signal time=1515274569.404274 sender=:1.6 -> destination=(null destination) serial=29022 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-appindicators@ubuntu.com" int32 2 string "" signal time=1515274569.442137 sender=:1.6 -> destination=(null destination) serial=29025 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-dock@ubuntu.com" int32 2 string "" signal time=1515274569.455035 sender=:1.6 -> destination=(null destination) serial=29027 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged boolean true signal time=1515274569.657300 sender=:1.6 -> destination=:1.42 serial=29037 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 491 signal time=1515274569.657404 sender=:1.6 -> destination=(null destination) serial=29038 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 3 ) ] array [ ] signal time=1515276608.243100 sender=:1.6 -> destination=:1.2 serial=29039 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 489 signal time=1515276608.243573 sender=:1.2 -> destination=(null destination) serial=3291 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 0 signal time=1515276608.243843 sender=:1.2 -> destination=(null destination) serial=3292 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 0 ) ] array [ ] signal time=1515276608.244032 sender=:1.6 -> destination=:1.42 serial=29040 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 494 signal time=1515276608.270459 sender=:1.6 -> destination=(null destination) serial=29042 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 0 ) ] array [ ] signal time=1515276623.523917 sender=:1.6 -> destination=:1.42 serial=29043 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 491 signal time=1515276623.554451 sender=:1.6 -> destination=(null destination) serial=29047 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 3 ) ] array [ ] signal time=1515276668.529836 sender=:1.6 -> destination=:1.2 serial=29048 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 440 signal time=1515276668.530236 sender=:1.2 -> destination=(null destination) serial=3293 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 3 signal time=1515276668.530565 sender=:1.2 -> destination=(null destination) serial=3295 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 3 ) ] array [ ] signal time=1515279067.394398 sender=:1.6 -> destination=:1.2 serial=29051 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 498 signal time=1515279067.394982 sender=:1.2 -> destination=(null destination) serial=3296 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 0 signal time=1515279067.395139 sender=:1.2 -> destination=(null destination) serial=3297 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 0 ) ] array [ ] signal time=1515279067.395662 sender=:1.6 -> destination=:1.42 serial=29052 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 496 signal time=1515279067.414904 sender=:1.6 -> destination=(null destination) serial=29054 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 0 ) ] array [ ] signal time=1515279076.828255 sender=:1.6 -> destination=(null destination) serial=29063 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-dock@ubuntu.com" int32 1 string "" signal time=1515279076.829775 sender=org.freedesktop.DBus -> destination=(null destination) serial=851 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged string "org.kde.StatusNotifierWatcher" string "" string ":1.6" signal time=1515279076.829812 sender=org.freedesktop.DBus -> destination=:1.6 serial=5215 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string "org.kde.StatusNotifierWatcher" signal time=1515279076.829824 sender=:1.6 -> destination=(null destination) serial=29066 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-appindicators@ubuntu.com" int32 1 string "" signal time=1515279076.841923 sender=:1.6 -> destination=(null destination) serial=29067 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "clipboard-indicator@tudmotu.com" int32 1 string "" signal time=1515279076.844396 sender=:1.6 -> destination=(null destination) serial=29068 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "auto-move-windows@gnome-shell-extensions.gcampax.github.com" int32 1 string "" signal time=1515279076.851323 sender=:1.6 -> destination=(null destination) serial=29069 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged boolean false signal time=1515279076.896958 sender=:1.6 -> destination=(null destination) serial=29218 path=/StatusNotifierWatcher; interface=org.kde.StatusNotifierWatcher; member=StatusNotifierItemRegistered string "/" signal time=1515279076.921110 sender=:1.38 -> destination=(null destination) serial=2735 path=/org/gnome/evolution/dataserver/CalendarView/1887/93; interface=org.gnome.evolution.dataserver.CalendarView; member=complete array [ string "" string "" ] signal time=1515279076.924727 sender=:1.34 -> destination=(null destination) serial=2701 path=/org/gnome/evolution/dataserver/CalendarView/1870/92; interface=org.gnome.evolution.dataserver.CalendarView; member=complete array [ string "" string "" ] signal time=1515279077.686970 sender=:1.6 -> destination=(null destination) serial=30014 path=/StatusNotifierWatcher; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.kde.StatusNotifierWatcher" array [ dict entry( string "RegisteredStatusNotifierItems" variant array [ string ":1.66/org/ayatana/NotificationItem/software_update_available" ] ) ] array [

Я сначала попытался перейти на org.gnome.Mutter.IdleMonitor, но значения uint32 постоянно увеличивались, не зная почему?

Я установил с StatusChanged, вот окончательный скрипт:

#!/bin/bash # Turn keyboard backlight on/off using https://github.com/MatMoul/g810-led g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot) dbus-monitor --session "type=signal,interface=org.gnome.SessionManager.Presence,member=StatusChanged" | while read x; do case "$x" in *"uint32 3"*) g413-led -a 000000;; *"uint32 0"*) g413-led -a FFFFFF;; esac done

Заставки также могут работать:

g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot) dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | while read x; do case "$x" in *"boolean true"*) g413-led -a 000000;; *"boolean false"*) g413-led -a FFFFFF;; esac done

Конечно, вы можете поместить любую команду. Преимущество первого скрипта по сравнению с этим состоит в том, что он загорается клавиатурой перед входом пользователя, что упрощает ввод пароля.

Единственным недостатком является то, что клавиатура загорается после входа пользователя, а не нажатия клавиши, но я могу жить с этим.

Я экспериментировал с:

dbus-monitor --session "type='signal',interface='org.freedesktop.DBus.Properties',path='/org/gnome/Mutter/DisplayConfig'" | grep 'variant int32' | while read x; do case "$x" in *"variant int32 3"*) g413-led -a 000000;; *"variant int32 0"*) g413-led -a FFFFFF;; esac done

, но по какой-то причине он не работал, возможно, проблема grep.

2
ответ дан 17 July 2018 в 23:46

Решение, с которым я столкнулся, - это события DBUS.

Сначала я запускал dbus-monitor, чтобы увидеть, какие события вызывают, когда монитор идет / просыпается от сна:

signal time=1515274499.244468 sender=org.freedesktop.DBus -> destination=:1.394 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.394" signal time=1515274499.244502 sender=org.freedesktop.DBus -> destination=:1.394 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string ":1.394" signal time=1515274559.337480 sender=:1.6 -> destination=:1.2 serial=29015 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 440 signal time=1515274559.337878 sender=:1.2 -> destination=(null destination) serial=3288 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 3 signal time=1515274559.338267 sender=:1.2 -> destination=(null destination) serial=3290 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 3 ) ] array [ ] signal time=1515274569.389778 sender=:1.6 -> destination=(null destination) serial=29018 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "auto-move-windows@gnome-shell-extensions.gcampax.github.com" int32 2 string "" signal time=1515274569.398929 sender=:1.6 -> destination=(null destination) serial=29019 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "clipboard-indicator@tudmotu.com" int32 2 string "" signal time=1515274569.399633 sender=org.freedesktop.DBus -> destination=:1.6 serial=5195 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string "org.kde.StatusNotifierWatcher" signal time=1515274569.399660 sender=org.freedesktop.DBus -> destination=(null destination) serial=850 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged string "org.kde.StatusNotifierWatcher" string ":1.6" string "" signal time=1515274569.404274 sender=:1.6 -> destination=(null destination) serial=29022 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-appindicators@ubuntu.com" int32 2 string "" signal time=1515274569.442137 sender=:1.6 -> destination=(null destination) serial=29025 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-dock@ubuntu.com" int32 2 string "" signal time=1515274569.455035 sender=:1.6 -> destination=(null destination) serial=29027 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged boolean true signal time=1515274569.657300 sender=:1.6 -> destination=:1.42 serial=29037 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 491 signal time=1515274569.657404 sender=:1.6 -> destination=(null destination) serial=29038 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 3 ) ] array [ ] signal time=1515276608.243100 sender=:1.6 -> destination=:1.2 serial=29039 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 489 signal time=1515276608.243573 sender=:1.2 -> destination=(null destination) serial=3291 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 0 signal time=1515276608.243843 sender=:1.2 -> destination=(null destination) serial=3292 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 0 ) ] array [ ] signal time=1515276608.244032 sender=:1.6 -> destination=:1.42 serial=29040 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 494 signal time=1515276608.270459 sender=:1.6 -> destination=(null destination) serial=29042 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 0 ) ] array [ ] signal time=1515276623.523917 sender=:1.6 -> destination=:1.42 serial=29043 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 491 signal time=1515276623.554451 sender=:1.6 -> destination=(null destination) serial=29047 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 3 ) ] array [ ] signal time=1515276668.529836 sender=:1.6 -> destination=:1.2 serial=29048 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 440 signal time=1515276668.530236 sender=:1.2 -> destination=(null destination) serial=3293 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 3 signal time=1515276668.530565 sender=:1.2 -> destination=(null destination) serial=3295 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 3 ) ] array [ ] signal time=1515279067.394398 sender=:1.6 -> destination=:1.2 serial=29051 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 498 signal time=1515279067.394982 sender=:1.2 -> destination=(null destination) serial=3296 path=/org/gnome/SessionManager/Presence; interface=org.gnome.SessionManager.Presence; member=StatusChanged uint32 0 signal time=1515279067.395139 sender=:1.2 -> destination=(null destination) serial=3297 path=/org/gnome/SessionManager/Presence; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.SessionManager.Presence" array [ dict entry( string "status" variant uint32 0 ) ] array [ ] signal time=1515279067.395662 sender=:1.6 -> destination=:1.42 serial=29052 path=/org/gnome/Mutter/IdleMonitor/Core; interface=org.gnome.Mutter.IdleMonitor; member=WatchFired uint32 496 signal time=1515279067.414904 sender=:1.6 -> destination=(null destination) serial=29054 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.gnome.Mutter.DisplayConfig" array [ dict entry( string "PowerSaveMode" variant int32 0 ) ] array [ ] signal time=1515279076.828255 sender=:1.6 -> destination=(null destination) serial=29063 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-dock@ubuntu.com" int32 1 string "" signal time=1515279076.829775 sender=org.freedesktop.DBus -> destination=(null destination) serial=851 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged string "org.kde.StatusNotifierWatcher" string "" string ":1.6" signal time=1515279076.829812 sender=org.freedesktop.DBus -> destination=:1.6 serial=5215 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string "org.kde.StatusNotifierWatcher" signal time=1515279076.829824 sender=:1.6 -> destination=(null destination) serial=29066 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "ubuntu-appindicators@ubuntu.com" int32 1 string "" signal time=1515279076.841923 sender=:1.6 -> destination=(null destination) serial=29067 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "clipboard-indicator@tudmotu.com" int32 1 string "" signal time=1515279076.844396 sender=:1.6 -> destination=(null destination) serial=29068 path=/org/gnome/Shell; interface=org.gnome.Shell.Extensions; member=ExtensionStatusChanged string "auto-move-windows@gnome-shell-extensions.gcampax.github.com" int32 1 string "" signal time=1515279076.851323 sender=:1.6 -> destination=(null destination) serial=29069 path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged boolean false signal time=1515279076.896958 sender=:1.6 -> destination=(null destination) serial=29218 path=/StatusNotifierWatcher; interface=org.kde.StatusNotifierWatcher; member=StatusNotifierItemRegistered string "/" signal time=1515279076.921110 sender=:1.38 -> destination=(null destination) serial=2735 path=/org/gnome/evolution/dataserver/CalendarView/1887/93; interface=org.gnome.evolution.dataserver.CalendarView; member=complete array [ string "" string "" ] signal time=1515279076.924727 sender=:1.34 -> destination=(null destination) serial=2701 path=/org/gnome/evolution/dataserver/CalendarView/1870/92; interface=org.gnome.evolution.dataserver.CalendarView; member=complete array [ string "" string "" ] signal time=1515279077.686970 sender=:1.6 -> destination=(null destination) serial=30014 path=/StatusNotifierWatcher; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged string "org.kde.StatusNotifierWatcher" array [ dict entry( string "RegisteredStatusNotifierItems" variant array [ string ":1.66/org/ayatana/NotificationItem/software_update_available" ] ) ] array [

Я сначала попытался перейти на org.gnome.Mutter.IdleMonitor, но значения uint32 постоянно увеличивались, не зная почему?

Я установил с StatusChanged, вот окончательный скрипт:

#!/bin/bash # Turn keyboard backlight on/off using https://github.com/MatMoul/g810-led g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot) dbus-monitor --session "type=signal,interface=org.gnome.SessionManager.Presence,member=StatusChanged" | while read x; do case "$x" in *"uint32 3"*) g413-led -a 000000;; *"uint32 0"*) g413-led -a FFFFFF;; esac done

Заставки также могут работать:

g413-led -a FFFFFF # always turn on on startup (it turns off for some reason on reboot) dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | while read x; do case "$x" in *"boolean true"*) g413-led -a 000000;; *"boolean false"*) g413-led -a FFFFFF;; esac done

Конечно, вы можете поместить любую команду. Преимущество первого скрипта по сравнению с этим состоит в том, что он загорается клавиатурой перед входом пользователя, что упрощает ввод пароля.

Единственным недостатком является то, что клавиатура загорается после входа пользователя, а не нажатия клавиши, но я могу жить с этим.

Я экспериментировал с:

dbus-monitor --session "type='signal',interface='org.freedesktop.DBus.Properties',path='/org/gnome/Mutter/DisplayConfig'" | grep 'variant int32' | while read x; do case "$x" in *"variant int32 3"*) g413-led -a 000000;; *"variant int32 0"*) g413-led -a FFFFFF;; esac done

, но по какой-то причине он не работал, возможно, проблема grep.

2
ответ дан 24 July 2018 в 17:06

Крошечный фоновый процесс

Ваша установка кажется довольно сложной для простой проблемы. То, что я сделал бы, это просто запустить крошечный обратный процесс, проверяя время простоя один раз в 2 секунды или около того, предпринять одно действие, если время простоя превышает предел, другое действие, если оно переключается на заданное время простоя.

Сценарий:

#!/usr/bin/env python3
import time
import subprocess

# set idle time (seconds)
t = 60

# set commands
on_idle = ["g413", "-led", "-a", "000000"]
on_active = ["g413", "-led", "-a", "FFFFFF"]

def set_state(cmd):
    subprocess.Popen(cmd)

def get_idle():
    return int(subprocess.check_output("xprintidle").decode("utf-8").strip())/1000

idle1 = 0

while True:
    time.sleep(2)
    idle2 = get_idle()
    # if idle time exceeds (passes) the limit, run one command
    if all([idle2 >= t, idle1 < t]):
        set_state(on_idle)
    # if idle time switches to below (passes) the limit, run another command
    elif all([idle2 <= t, idle1 > t]):
        set_state(on_active)
    idle1 = idle2

Использовать

Убедитесь, что установлен xprintidle
sudo apt install xprintidle
Скопируйте сценарий в пустой файл, сохраните его как switch_light.py Установите желаемый холостой ход время для принятия решения после:
# set idle time (seconds)
t = 60
Запустить его по команде:
python3 /path/to/switch_light.py
Если все работает нормально, добавьте его в Запуск приложений.

Примечание (ы)

Убедитесь, что установлен xprintidle
sudo apt install xprintidle

Убедитесь, что установлен xprintidle

[ f5] Просто убедитесь, что вы разделяете аргументы, как в примере. Скопируйте сценарий в пустой файл, сохраните его как switch_light.py
1
ответ дан 22 May 2018 в 15:44
  • 1
    Благодарю. Я придумал решение bash. Таким образом, никакой зависимости python и xprintidle. И не спать, поэтому я думаю, что это будет также более показательно. Пожалуйста, проверьте мой ответ выше и поделитесь своим мнением. – umpirsky 7 January 2018 в 18:39
  • 2
    Привет @umpirsky Спасибо за комментарий. Выполнение такого рода фоновых процессов добавляет ноль к нагрузке вашей системы. Если хорошо написано, даже 10-20 из них не будут заметны вообще, и зависимость от xprintidle не добавит ничего. Для меня невозможность установить время простоя независимо от событий заставки будет серьезной проблемой, но если это не для вас, вы вполне можете использовать свое решение, конечно. – Jacob Vlijm 7 January 2018 в 18:45
  • 3
    Да, мое решение будет уважать настройки отображения. Ваше решение можно легко обновить, чтобы соблюдать время простоя экрана с помощью gsettings get org.gnome.desktop.session idle-delay. ;) – umpirsky 8 January 2018 в 00:41
  • 4
    @umpirsky Uuhhhm, не совсем понятно, вопрос состоял в том, как запустить команду после x бездействия и наоборот not о том, как объединить ее с действиями экрана. Кажется, теперь вы продаете недостаток в своем решении в качестве преимущества? – Jacob Vlijm 8 January 2018 в 16:26
  • 5
    Вы правы, но я также спросил, есть ли возможность повторного использования параметров энергосбережения и событий. Это предпочтительнее опроса, я обновил заголовок вопроса, чтобы подобрать вопрос. Благодаря! – umpirsky 10 January 2018 в 14:06

Крошечный фоновый процесс

Ваша установка кажется довольно сложной для простой проблемы. То, что я сделал бы, это просто запустить крошечный обратный процесс, проверяя время простоя один раз в 2 секунды или около того, предпринять одно действие, если время простоя превышает предел, другое действие, если оно переключается на заданное время простоя.

Сценарий:

#!/usr/bin/env python3 import time import subprocess # set idle time (seconds) t = 60 # set commands on_idle = ["g413", "-led", "-a", "000000"] on_active = ["g413", "-led", "-a", "FFFFFF"] def set_state(cmd): subprocess.Popen(cmd) def get_idle(): return int(subprocess.check_output("xprintidle").decode("utf-8").strip())/1000 idle1 = 0 while True: time.sleep(2) idle2 = get_idle() # if idle time exceeds (passes) the limit, run one command if all([idle2 >= t, idle1 < t]): set_state(on_idle) # if idle time switches to below (passes) the limit, run another command elif all([idle2 <= t, idle1 > t]): set_state(on_active) idle1 = idle2

Использовать

Убедитесь, что установлен xprintidle sudo apt install xprintidle Скопируйте сценарий в пустой файл, сохраните его как switch_light.py Установите желаемый холостой ход время для принятия решения после: # set idle time (seconds) t = 60 Запустить его по команде: python3 /path/to/switch_light.py Если все работает нормально, добавьте его в Запуск приложений.

Примечание (ы)

Убедитесь, что установлен xprintidle sudo apt install xprintidle

Убедитесь, что установлен xprintidle

# set commands on_idle = ["g413", "-led", "-a", "000000"] on_active = ["g413", "-led", "-a", "FFFFFF"] Просто убедитесь, что вы разделяете аргументы, как в примере. Скопируйте сценарий в пустой файл, сохраните его как switch_light.py
1
ответ дан 17 July 2018 в 23:46

Крошечный фоновый процесс

Ваша установка кажется довольно сложной для простой проблемы. То, что я сделал бы, это просто запустить крошечный обратный процесс, проверяя время простоя один раз в 2 секунды или около того, предпринять одно действие, если время простоя превышает предел, другое действие, если оно переключается на заданное время простоя.

Сценарий:

#!/usr/bin/env python3 import time import subprocess # set idle time (seconds) t = 60 # set commands on_idle = ["g413", "-led", "-a", "000000"] on_active = ["g413", "-led", "-a", "FFFFFF"] def set_state(cmd): subprocess.Popen(cmd) def get_idle(): return int(subprocess.check_output("xprintidle").decode("utf-8").strip())/1000 idle1 = 0 while True: time.sleep(2) idle2 = get_idle() # if idle time exceeds (passes) the limit, run one command if all([idle2 >= t, idle1 < t]): set_state(on_idle) # if idle time switches to below (passes) the limit, run another command elif all([idle2 <= t, idle1 > t]): set_state(on_active) idle1 = idle2

Использовать

Убедитесь, что установлен xprintidle sudo apt install xprintidle Скопируйте сценарий в пустой файл, сохраните его как switch_light.py Установите желаемый холостой ход время для принятия решения после: # set idle time (seconds) t = 60 Запустить его по команде: python3 /path/to/switch_light.py Если все работает нормально, добавьте его в Запуск приложений.

Примечание (ы)

Убедитесь, что установлен xprintidle sudo apt install xprintidle

Убедитесь, что установлен xprintidle

# set commands on_idle = ["g413", "-led", "-a", "000000"] on_active = ["g413", "-led", "-a", "FFFFFF"] Просто убедитесь, что вы разделяете аргументы, как в примере. Скопируйте сценарий в пустой файл, сохраните его как switch_light.py
1
ответ дан 24 July 2018 в 17:06
  • 1
    Благодарю. Я придумал решение bash. Таким образом, никакой зависимости python и xprintidle. И не спать, поэтому я думаю, что это будет также более показательно. Пожалуйста, проверьте мой ответ выше и поделитесь своим мнением. – umpirsky 7 January 2018 в 18:39
  • 2
    Привет @umpirsky Спасибо за комментарий. Выполнение такого рода фоновых процессов добавляет ноль к нагрузке вашей системы. Если хорошо написано, даже 10-20 из них не будут заметны вообще, и зависимость от xprintidle не добавит ничего. Для меня невозможность установить время простоя независимо от событий заставки будет серьезной проблемой, но если это не для вас, вы вполне можете использовать свое решение, конечно. – Jacob Vlijm 7 January 2018 в 18:45
  • 3
    Да, мое решение будет уважать настройки отображения. Ваше решение можно легко обновить, чтобы соблюдать время простоя экрана с помощью gsettings get org.gnome.desktop.session idle-delay. ;) – umpirsky 8 January 2018 в 00:41
  • 4
    @umpirsky Uuhhhm, не совсем понятно, вопрос состоял в том, как запустить команду после x бездействия и наоборот not о том, как объединить ее с действиями экрана. Кажется, теперь вы продаете недостаток в своем решении в качестве преимущества? – Jacob Vlijm 8 January 2018 в 16:26
  • 5
    Вы правы, но я также спросил, есть ли возможность повторного использования параметров энергосбережения и событий. Это предпочтительнее опроса, я обновил заголовок вопроса, чтобы подобрать вопрос. Благодаря! – umpirsky 10 January 2018 в 14:06

Другие вопросы по тегам:

Похожие вопросы: