저는 CPU 사용량에 대한 동적 상태 표시줄을 만들기 위해 간단한 스크립트를 사용하고 있습니다(아래 참조). fvwm을 시작한 후에는 작동하지만 3-4분 후에 표시줄이 사라집니다! cpu.sh는 간단합니다(아래 참조). ChangeSize가 없으면 충돌이 발생하지 않습니다(그러나 동적 열은 없고 정적 열만 있음). ChangeSize에는 정수가 필요하기 때문에 cpu.sh는 정수를 제공합니다. 이 충돌의 원인은 무엇일까요? 나는 그것에 대해 이틀을 보냈고 이유를 이해하지 못합니다.
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)}'
답변1
댓글에서 말씀드린대로 FvwmScript
X오류로 인해 크래시가 나는 것 같습니다.나쁜 가치쉘 스크립트에서 반환된 값이 0인 경우. 이는 아마도 창 크기를 0으로 구성하려고 하기 때문일 것입니다.
HDipstick
또 다른 해결책은 고정 길이 상자의 가로 막대인 위젯을 사용하는 것입니다 . 다음은 짧지만 완전한 예입니다.
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
스크립트에서 예상되는 반환 수에 대한 제한을 설정합니다 MinValue
. MaxValue
무작위로 200개를 선택했어요. PeriodicTasks
스크립트 호출은 이 번호를 가져와 이를 사용하여 속성을 설정합니다 ChangeValue
. 200으로 나누고 가로 막대의 너비(여기서는 110픽셀 단위)를 Value
곱하여 크기가 조정됩니다 .Size
이것을 사용하는 동안 특정 낮은 값에 대해 전체 막대를 그리는 FvwmScript 버전의 버그를 발견했습니다. 예를 들어, a를 MaxValue
700으로 설정하면 7~26의 값이 전체 막대를 제공한다는 의미입니다.