Eu configurei meu próprio cron job para lidar com isso.
O que alcancei
Suspendendo / desligando a máquina se ela estiver inativa (sem pressionamentos de teclas ou movimentos do mouse) por um determinado período de tempo, a menos que haja arquivos sendo acessados em seu servidor SAMBA.
Requisitos
-
root
access. -
xprintidle
(instale-o executando em um terminal:sudo apt-get install xprintidle
)
Como
-
Salve o seguinte script em um local de sua escolha (no meu caso,
/home/user/.useful-scripts/idle.sh
):#!/bin/bash # Checks the time the computer has been idle (no keystrokes or mouse moves) # If it's greater than the set limit, it will suspend the machine if no # files are being accessed through the SAMBA server. # The maximum number of milliseconds the computer is allowed to be idle before # it is suspended (set to 20 minutes) IDLE_LIMIT_MS=1200000 # How long the machine has been idle for IDLE_TIME_MS=$(/sbin/runuser -l ic -c "DISPLAY=:0.0 /usr/bin/xprintidle") if [ $IDLE_TIME_MS -gt $IDLE_LIMIT_MS ] ; then # If there are no files locked by SAMBA, suspend the machine FILES_LOCKED=$(/usr/bin/smbstatus | /bin/grep 'Locked files:') if [[ -z "${FILES_LOCKED}" ]] ; then /bin/systemctl suspend -i # If you prefer to shut down instead of suspend, comment the # previous line and uncomment the following one: # /sbin/poweroff fi fi
Esteja ciente de que este script será executado por
cron
. Isso tem certas implicações, mas principalmente que as variáveis de ambienteDISPLAY
ePATH
não estão definidas. Portanto, precisamos fornecer o caminho completo ao invocar um comando. Os caminhos podem mudar em sua máquina, portanto, verifique se eles correspondem à sua configuração (por exemplo, para encontrar o caminho paraxprintidle
executar em um terminalwhich xprintidle
).Também precisamos especificar o DISPLAY para o qual queremos as informações de
xprintidle
. É normalmente:0.0
, mas você pode ter certeza disso executandow
de um terminal enquanto estiver logado e verificando a colunaFROM
. Leia estes três links ( 1 , 2 e 3 ) para obter mais informações sobrePATH
eDISPLAY
emcron
. -
Certifique-se de torná-lo executável:
chmod + x /home/user/.useful-scripts/idle.sh
-
Configure o trabalho para ser executado periodicamente usando
cron
.smbstatus
precisa ser executado comoroot
, por isso precisamos invocarcrontab
usandosudo
:sudo crontab -e
Adicione a seguinte linha para executar o script periodicamente:
* * * * * /home/user/.useful-scripts/idle.sh
Isso configura uma tarefa cron para ser executada a cada minuto e executar nosso script. Você pode configurar a periodicidade para um valor mais alto se não se importar com precisão menor (consulte este link para mais informações sobre a sintaxe necessária).
É isso. cron
verificará o estado inativo da máquina a cada minuto e, se estiver ocioso por mais de 20 minutos (pode ser ajustado com a variável IDLE_LIMIT_MS
), ele se certificará de que nenhum arquivo esteja sendo acessado pelo servidor SAMBA ; nesse caso, ele suspenderá a máquina.