Você pode fazer algo simples como este, que usa execpi
para executar um script de shell a cada 30 segundos que analisa a saída de df /
e o converte em uma longa cadeia de comandos conky color
e \#
caracteres (já que #
é usado para comentários):
${execpi 30 df --output=pcent / | awk 'NR==2 {
n = ($1+0)/2; yellow = 20; red = 40;
if(n>=red) { r = "${color #ff0000}"; for(;n>=red;n--) r = r "\#" }
if(n>=yellow){ y = "${color #ffff00}"; for(;n>=yellow;n--)y = y "\#" }
g = "${color #00ff00}"; for(;n>0;n--) g = g "\#";
print g y r
printf "%50s"," "
}' }
${color}
Meu df --output=pcent
gera 2 linhas; o segundo é uma porcentagem usada, por exemplo, 69%
. Eu tentei isso em 1.9 conky.
Se o seu arquivo ~/.conkyrc
foi convertido para a versão de formato 1.10, ele conterá uma linha
conky.text = [[
Certifique-se de adicionar o script acima antes do fechamento final ]]
.
Além disso, em 1,10 cores dadas como números (por exemplo, #ff0000
acima) não começam mais com #
, então você deve usar ff0000
e assim por diante no script.
Para simplificar, coloque o seguinte script em um arquivo separado em algum lugar em seu PATH, diga ~/mydf
, torne-o executável ( chmod +x ~/mydf
) e coloque esse nome de arquivo em ~/.conkyrc
, por exemplo, ${execpi 30 ~/mydf /}
#!/bin/bash
df --output=pcent "${1?}" | awk 'NR==2{
n = ($1+0)/2; yellow = 20; red = 40;
if(n>=red) { r = "${color ff0000}"; for(;n>=red;n--) r = r "\#" }
if(n>=yellow){ y = "${color ffff00}"; for(;n>=yellow;n--)y = y "\#" }
g = "${color 00ff00}"; for(;n>0;n--) g = g "\#";
print g y r
printf "%50s"," "
}'
Se você quiser colocar todo o script no arquivo ~/.conkyrc
, será necessário aumentar o tamanho padrão do buffer ou o comando será truncado para 256 caracteres. Isso leva a erros como
sh: -c: line 0: unexpected EOF while looking for matching '''
Para fazer isso, no 1.10 adicione uma linha dentro da parte conky.config={...}
, certificando-se de separar as configurações com uma vírgula ( ,
):
text_buffer_size = 400,
No conky 1.9 adicione uma linha antes da seção TEXT
:
text_buffer_size 400
Para parar o redimensionamento da janela à medida que o número de caracteres impressos aumenta, um% final printf "%50s"," "
adiciona uma segunda linha de espaços do tamanho máximo. Como alternativa, adicione uma configuração para o tamanho mínimo da janela em pixels, por exemplo, minimum_size 500
(ou minimum_size=500,
para 1,10), em que o valor a ser usado depende da largura da fonte do caractere #
.