Evitar que o sistema entre em suspensão / suspensão - como o Xviewer / VLC faz isso

2

Quando Xviewer ou VLC estão no modo de tela cheia no Linux Mint, meu laptop não entra no modo de suspensão. Algumas outras aplicações, por ex. mpv em tela cheia, não impeça o sono.

Não há opções na Xviewer GUI para manter o status de vigília.

Como o Xviewer faz a prevenção e como desativar?

Como ativar a prevenção de sono para aplicativos em que considero esse comportamento benéfico, como Transmission , por exemplo?

    
por Alexei Martianov 14.04.2018 / 14:07

1 resposta

5

Sobre toda a sessão da área de trabalho:

Existem dois miniaplicativos populares para evitar suspensão / suspensão: Caffeine e Inhibit Applet (miniaplicativo Cinnamon integrado: Clique com o botão direito no Painel inferior - > Adicionar miniaplicativos ao painel - > Inhibit Applet . são prevenir a todo (não é possível definir lista de aplicativos próprios inibir).

Sobre a aplicação específica:

Eu baixei as fontes de Transmission e vi que a prevenção é fornecida pelo método de chamada DBUS ( org.gnome.SessionManager.Inhibit ) para a sessão do Cinnamon DBUS. Portanto, deve ser um aplicativo que armazene uma lista de programas e monitore se pelo menos um dos programas da lista estiver sendo executado. Se estiver em execução, chame o método DBUS para a sessão Cinnamon. Mas eu não encontrei o programa como acabei de descrever.

Pelo que entendi, todo programa que deseja evitar o sleep / suspend / screensaver, deve implementar a chamada do método DBUS . Eu não descubro fontes do Firefox, mas eu acho que se ele não implementa a chamada DBUS, então esta parte é implementada por desenvolvedores da equipe Mint por patch (é possível tocar em qualquer programa que não implementa métodos DBUS).

No entanto, descubro o Firefox no trabalho (com dbus-monitor ) sobre o que acontece quando o vídeo no youtube está sendo reproduzido. Quando o vídeo começa a ser reproduzido, o Firefox envia duas chamadas:

$ dbus-monitor
. . .
# disable screensaver
method call time=1523976795.844938 sender=:1.104 ->
destination=org.freedesktop.ScreenSaver serial=9 path=/ScreenSaver;
interface=org.freedesktop.ScreenSaver; member=Inhibit
  string "firefox"
  string "video-playing"
# disable sleeping
method call time=1523976795.893407 sender=:1.21 -> destination=:1.3
serial=61 path=/org/gnome/SessionManager;
interface=org.gnome.SessionManager; member=Inhibit
  string "firefox"
  uint32 0
  string "video-playing"
  uint32 8
. . .

Depois de chamar o último método, foi criado o seguinte inibidor:

$ dbus-send --session --type=method_call --print-reply
--dest=org.gnome.SessionManager /org/gnome/SessionManager
org.gnome.SessionManager.GetInhibitors
method return time=1523969881.311742 sender=:1.3 -> destination=:1.188
serial=491 reply_serial=2
  array [
     object path "/org/gnome/SessionManager/Inhibitor6"
  ]

Quando o vídeo do youtube foi interrompido, o inibidor está sendo removido:

$ dbus-send --session --type=method_call --print-reply
--dest=org.gnome.SessionManager /org/gnome/SessionManager
org.gnome.SessionManager.GetInhibitors
method return time=1523969881.311742 sender=:1.3 -> destination=:1.188
serial=493 reply_serial=2
  array [
  ]

Sobre a transmissão:

Transmission tem caixa de seleção para impedir a suspensão: Preferences - > Desktop tab- > Inhibit hibernation when torrents are active .

Sobre o VLC:

O VLC impede o modo de suspensão / suspensão da mesma maneira que o Firefox:

$ dbus-monitor
. . .
method call time=1523977809.526716 sender=:1.8017 ->
destination=org.freedesktop.ScreenSaver serial=3 path=/ScreenSaver;
interface=org.freedesktop.ScreenSaver; member=Inhibit
  string "vlc"
  string "Playing some media."
method call time=1523977809.527152 sender=:1.21 -> destination=:1.3
serial=91 path=/org/gnome/SessionManager;
interface=org.gnome.SessionManager; member=Inhibit
  string "vlc"
  uint32 0
  string "Playing some media."
  uint32 8
. . .

$ dbus-send --session --type=method_call --print-reply
--dest=org.gnome.SessionManager /org/gnome/SessionManager
org.gnome.SessionManager.GetInhibitors
method return time=1523977813.424421 sender=:1.3 ->
destination=:1.8018 serial=85789 reply_serial=2
  array [
     object path "/org/gnome/SessionManager/Inhibitor7750"
  ]

Sobre o Xviewer :

Quando você inicia o slideshow, ele chama o método DBUS como os programas descritos anteriormente. Eu não vou postar nenhum dos DBUS sobre o Xviewer porque ele gosta do anterior.

    
por 17.04.2018 / 17:22