Como remover um bloco de inibição do systemd?

2

A documentação sobre o Bloqueios para Inibidores do Systemd e também man systemd-inhibit se esforça para explicar como iniciar um processo de uma forma que bloqueia algo (por exemplo, o handle-lid-switch event).

Não consegui encontrar uma maneira de permitir que eu removesse esse "bloqueio" / "inibir" / "bloquear".

Pergunta: Existe uma maneira de remover o bloqueio systemd-inhibit , por exemplo, por meio de uma mensagem dbus ?

Plano de fundo: o que eu preciso para remover um bloqueio de inibidor para **

Meu laptop tem um interruptor de fechar a tampa do laptop, que systemd-logind monitora e, caso a tampa esteja fechada, suspende o laptop - funcionalidade " close-lid -> suspend ".

Uma vez que o laptop é colocado em sua estação de ancoragem, para tornar o usuário de uma tela maior, a potência gsd do Gnome arbitrariamente (e erroneamente e sem qualquer configuração disponível no Gnome para alterá-lo) decide criar um bloqueio de inibidor, impedindo que a funcionalidade " close-lid -> suspend " funcione.

Saber como remover um bloqueio de inibidor, permitiria que eu remediasse a configuração errônea feita pelo gnome-setting-deamon power gsd-power do Gnome. A configuração do Gnome está errada, porque invocar manualmente a suspensão systemctl suspend não mostrou nenhum problema.

O bloqueio do inibidor que gostaria de remover, conforme listado em systemd-inhibit --list , é este:

     Who: alex (UID 1000/alex, PID 4248/gsd-power)
    What: handle-lid-switch
     Why: Multiple displays attached
    Mode: block
    
por humanityANDpeace 14.09.2018 / 12:13

1 resposta

1

Da documentação do desenvolvedor dos bloqueios do inibidor:

Inhibit() returns a single value, a file descriptor that encapsulates the lock. As soon as the file descriptor is closed (and all its duplicates) the lock is automatically released. If the client dies while the lock is taken the kernel automatically closes the file descriptor so that the lock is automatically released. A delay lock taken this way should be released ASAP on reception of PrepareForShutdown(true) (see below), but of course only after execution of the actions the application wanted to delay the operation for in the first place.

Você provavelmente não quer matar gsd-power , então você precisaria fechar o descritor de arquivo que encapsula o bloqueio. É mais provável que seja mantido por gsd-power . Forçar outro processo para fechar um de seus descritores de arquivos não é uma coisa normal, e pode causar alguns efeitos colaterais dentro de gsd-power . Mas se você quiser fazer isso, leia esta pergunta no Stack Overflow.

Em vez disso, você pode tentar remover a permissão gsd-power para executar a ação org.freedesktop.login1.inhibit-handle-lid-switch do DBus. A página manual dbus-daemon(1) pode ser útil.

    
por 14.09.2018 / 12:48