Fvwm ChangeSize falha

1

Eu uso um script simples para criar uma barra dinâmica de status do uso da CPU (veja abaixo). Depois de iniciar o fvwm ele funciona, mas depois de 3-4 minutos o bar desaparece! O cpu.sh é simples (veja abaixo). Sem o ChangeSize não há falhas (mas não há barra dinâmica, apenas estática). O cpu.sh dá um número inteiro porque o ChangeSize precisa de um número inteiro. O que talvez isso aconteça? Passei já dois dias e não entendi a razão.

WindowTitle {Status}
WindowSize 120 30

##### Global Style
Font "xft:DejaVu Sans:size=8:bold"

Init
Begin
Set $probarColor = {#cccccc} 
##### Widgets
ChangeBackColor 1  $probarColor
ChangeBackColor 3  $probarColor
End

PeriodicTasks
Begin
##### CPU Status
If (RemainderOfDiv (GetTime) 2) == 0 Then
 Begin
Set $length =  (GetOutput {echo $(bash    $HOME/.fvwm/scripts/StaTux/cpu.sh)} 1 -1) 
ChangeSize 3 $length 3
 End
End

Widget      1
Property
Type        ItemDraw
Size        120 4
Position        0 0
Flags       NoFocus NoReliefString
Main
Case message of
End

Widget      2
Property
Type        ItemDraw
Size        118 2
Position        1 1
Flags       NoFocus NoReliefString
Main
Case message of
End

Widget      3
Property
Type        ItemDraw
Size        118 2
Position        1 1
Flags       NoFocus NoReliefString
Main
Case message of
End

cpu.sh

#!/bin/sh
DELAY=${1:-1}
{ cat /proc/stat; sleep "$DELAY"; cat /proc/stat; } | awk '/^cpu / {usr=$2-usr; sys=$4-sys; idle=$5-idle; iow=$6-iow} END {total=usr+sys+idle+iow; print int((total-idle)*118/total)}'
    
por nail 12.07.2018 / 02:01

1 resposta

0

Como discutido nos comentários, parece que FvwmScript falha devido a um erro X BadValue quando o valor retornado pelo script de shell é 0. Isso provavelmente ocorre porque ele está tentando configurar a janela para um tamanho de 0.

Uma solução alternativa é usar o widget HDipstick , que é uma barra horizontal em uma caixa de tamanho fixo. Aqui está um exemplo curto, mas completo:

WindowTitle    {Status}
WindowSize     120 30
WindowPosition 900 1
Init
 Begin
  ChangeBackColor 3 {#000}
 End

PeriodicTasks
Begin
 If (RemainderOfDiv (GetTime) 2) == 0 Then
  Begin
   Set $length = (GetOutput {bash $HOME/.fvwm/scripts/StaTux/cpu.sh} 1 -1)
   ChangeValue 3 $length
 End
End

Widget 3
Property
 Type        HDipstick
 Value       0
 MinValue    0
 MaxValue    200
 ForeColor   {#f00}
 Size        110 20
 Position    5 5
Main
 Case message of
 End

Os MinValue e MaxValue definem os limites esperados para o número que você está recebendo de volta do seu script. Eu escolhi 200 arbitrariamente. A chamada PeriodicTasks do seu script obtém esse número e usa ChangeValue para definir a propriedade Value para ele. Ele será dimensionado dividindo-se por 200 e multiplicando pela largura da barra horizontal, fornecida aqui em Size como 110 pixels.

Ao jogar com isso, notei um bug na minha versão do FvwmScript que desenhava uma barra cheia para certos valores baixos. Por exemplo, definir um MaxValue de 700 significa que os valores 7 a 26 deram uma barra completa.

    
por 14.07.2018 / 20:04

Tags