получите xautolock состояние

Прием должен использовать тестовую команду test или эквивалент [ ... ]:

 while [ "$(du -m f|cut -f1)" -lt 32 ]
 do 
  ./gcd-rand.py 10000 10000 > "$f"
 done

Посмотрите help test для получения дополнительной информации.

Примечание:

test или [ команда является встроенным ударом. Справочная информация может быть получена в ударе через help test или help [. man test относится к test команда, которая используется, если оболочка имеет не такое встроенное или вызывается явно как /usr/bin/test.

7
16.07.2014, 16:30
3 ответа

Для управления этим можно использовать функциональность, встроенную в большинство медиаплееров; она эффективно работает с xautolock и это шкафчики.

mpv и mplayer имеют опции экранной заставки:

--stop-screensaver, --no-stop-screensaver Turns off the screensaver (or screen blanker and similar mechanisms) at startup and turns it on again on exit (default: yes). The screensaver is always re-enabled when the player is paused. This is not supported on all video outputs or platforms. Sometimes it is implemented, but does not work (happens often on GNOME). You might be able to to work this around using --heartbeat-cmd instead.

Вы можете включить эту функцию, включив строку в свой ~/.mpv/config:

stop-screensaver=yes

и наслаждаться бесперебойным воспроизведением видео.

Если вы используете медиаплеер, который не имеет этой базовой функциональности, вы можете использовать простую обертку для достижения того же эффекта:

#!/usr/bin/env bash
# wrapper to prevent screen blanking when files are played from ~/Videos

usage() {
    printf "%s\n" "Usage: ${0##*/} /path/to/file"
    exit 1
}

case $# in
    1)  if [[ $1 =~ Videos ]]; then
            xset dpms 0 0 0
            xautolock -disable
            vlc "$1"
            xautolock -enable
            xset dpms 900 900 900
        else
            usage
        fi
        ;;
    *) usage
        ;;
esac
2
27.01.2020, 20:18

Попробуйте это:

$ awk -v SUBSEP=" " '
    {a[$1,$2]++;b[$1,$2] = (b[$1,$2] && $3 > b[$1,$2]) ? b[$1,$2] : $3}
    END {
        for (i in a) {
            print i,a[i],b[i];
        }
    }
' file
A B 2 1990
A C 2 2001
A D 2 2001
B C 1 2013

Даже короче, если вы можете изменить порядок полей:

$ sort -n -k1 -k2 -k3 file | uniq -c -w 3
      2 A B 1990
      2 A C 2001
      2 A D 2001
      1 B C 2013
-121--65022-

Хотя я не смог выяснить проблему с этим решением, я нашел альтернативный, который, кажется, работает: с помощью equalizer PulseAudio, где каждый канал может быть настроен отдельно.

-121--187240-

Быстрая проверка исходного кода текущей версии, xautolock 2,2 , показывает, что он не поддерживает эту функцию, хотя будет не слишком сложно реализовать его самостоятельно, если вы знаете немного о C и как писать программы X .

Причина, вероятно, в следующем: когда вы хотите знать статус xautolock , вы также знаете, в каком статусе вы хотели бы, чтобы он был. Итак, просто выдайте xautolock -disable , если вы хотите, чтобы он был выключен, и xautolock -enable в обратном случае. Обратите внимание, что это не повлияет на все остальные настройки xautolock .

Отслеживание состояния самостоятельно, как вы предлагаете, также возможно, но, вероятно, несколько ненадежно и подвержено ошибкам.

4
27.01.2020, 20:18

Мне удалось сделать то, о чем просил OP, и все это содержится в моей конфигурации i3, привязанной к ярлыку (см. ниже). Итак, я блокирую экран с помощью Mod+o и переключаю автоматическую блокировку экрана с помощью Mod+Shift+o, где появляется уведомление, которое говорит мне либо "LOCK on", либо "LOCK OFF", в зависимости от "статуса" xautolock. Я использовал xautlock -exit, чтобы выяснить, запущен он или нет, без необходимости управлять статусом в дополнительном файле.

Сценарий, который сам по себе заботится о переключении статуса, выглядит так

if xautolock -exit
    then (notify-send -u normal -t 100 -- 'LOCK OFF') 2> /dev/null
    else
        notify-send -u normal -t 100 -- 'LOCK on'
        xautolock -time 2 -locker 'slock' -notify 10 -notifier "notify-send -u normal -t 100 -- 'LOCKING screen ...'"
fi

В зависимости от того, где вы вызываете этот сценарий, вы должны убедиться, что xautolock -time ... работает в фоновом режиме (например, добавив &).

Из моего .i3/config файла:

exec --no-startup-id xautolock -time 2 -locker 'slock' -notify 10 -notifier "notify-send -u normal -t 10000 -- 'LOCKING screen'"

bindsym $mod+o exec --no-startup-id xautolock -locknow
bindsym $mod+Shift+o exec --no-startup-id "if xautolock -exit; then (notify-send -u normal -t 100 -- 'LOCK OFF') 2> /dev/null; else notify-send -u normal -t 100 -- 'LOCK on'; xautolock -time 2 -locker 'slock' -notify 10 -notifier \\"notify-send -u normal -t 100 -- 'LOCKING screen ...'\\"; fi"
2
27.01.2020, 20:18

Теги

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