LINUX.ORG.RU

i3status

 , ,


0

3

Стоит i3, нужно вывести список процессов в i3bar. На json + conky это выглядит примерно так:

{ "full_text" : "  ${top_mem name 1}${top_mem pid 1}${top_mem mem_res 1}" , "color" : "\#ff1111" },
Но вариант с conky мне не подходит. Пробовал гуглить, но инфы катастрофически мало, а примеров по выводу процессов вообще не нашел.


нужно вывести список процессов в i3bar

Всех-всех? Получаете output

ps
(можно с ключами) и парсите в json. Например, с помощью bash-скрипта.

kalterfive ★★
()
Ответ на: комментарий от kalterfive

Не всех, первые 5 по top_mem. Я могу взять скрипт и попытаться изменить его, но не могу написать его сам. Можете написать мне?

isaq
() автор топика
Ответ на: комментарий от isaq

Ну для начала вам нужно избавиться от i3status =) Он вовсе не гибкий и ограничивающий. Не знаю как дело обстоит с другими генераторами, но я выбрал самый резкий вариант — использовать собственный скрипт на bash (то есть по факту всё в моих руках). При желании можно выбрать и другой язык (хоть компилируемый), разницы, в-принципе, никакой.

Получаем все процессы с помощью упомянутой выше программы ps, сортируем, и выводим нужную информацию.

count=3

proc=(`ps -eo pmem,cmd\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count`)
Читаем протокол Json i3bar, и оборачиваем процессы согласно правилам.
function toJson() {
    for process in "$@"; do
        echo '{"full_text":"'$process'","color":"#FFFFFF"},'
    done
}

echo `toJson ${proc[@]}`
И получаем примерно такой вывод:
{
    "full_text" : "firefox-developer",
    "color" : "#FFFFFF"
}, {
    "full_text" : "/usr/lib/xorg-server/Xorg",
    "color" : "#FFFFFF"
}, {
    "full_text" : "deadbeef",
    "color" : "#FFFFFF"
}, {
    "full_text" : "/opt/firefox-developer/plugin-container",
    "color" : "#FFFFFF"
}, {
    "full_text" : "compton",
    "color":"#FFFFFF"
},
/только \n заменится на пробелы, а пробелы удалятся, но парсеру i3bar на это пофиг/

Ну и чтобы это заработало нужно написать более полноценный скрипт (добавить в вывод Json заголовок, и учесть моменты с запятыми). Я реализовал таким образом:
https://github.com/KalterFive/dotfiles/blob/master/.config/i3/bar.sh

kalterfive ★★
()
Ответ на: комментарий от kalterfive

Сделал:

#!/usr/bin/env bash
E_UE=6 # unhandeled event

count=3

proc=(`ps -eo pmem,cmd\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count`)

function toJson() {
    for process in "$@"; do
        echo '{"full_text":"'$process'","color":"#FFFFFF"},'
    done
}

echo `toJson ${proc[@]}`



echo '{"version":1}['
while [ 1 ]; do
	for func in $func_list; do
		$func 2> /dev/null
	done
	eval echo -e \"${bar//\\/\\\\}\" || exit

	sleep 0.5
done

Вывода никакого нет, как исправить?

isaq
() автор топика
Ответ на: комментарий от isaq

Научиться понимать код на bash-e =)

#!/bin/bash

echo '{"version":1}['
while [ 1 ]; do

    ##
    ## Fattest processes
    ##
    count=5
    proc=(`ps -eo pmem,cmd\
        | sort -k 1 -nr\
        | awk '{print($2);}'\
        | head -$count`)
	

    ##
    ## Date and time
    ##
    date=`date +%a\ %d.%m.%Y`
    time=`date +%H:%M:%S`

    buffer='['
    for process in "${proc[@]}"; do
        buffer=$buffer'{"full_text":"'$process'","color":"#FFFFFF"},'
    done
    buffer=$buffer'{"full_text":"'$date'","color":"#FFFFFF"},'
    buffer=$buffer'{"full_text":"'$time'","color":"#FFFFFF"}],'

    echo $buffer
    sleep 0.5
done
kalterfive ★★
()
Ответ на: комментарий от kalterfive

Запустил из под вайна стим - всё отвалилось. https://i.gyazo.com/db84f6c03416204e5493b02108d8937f.png Видимо это из-за пути C:\windows\system32, как пофиксить, чтобы не падало?

Еще вопрос, можно watchdog процессы убрать? https://i.gyazo.com/34f89aba2008b89f1839d989b24bffca.png

isaq
() автор топика
Ответ на: комментарий от isaq

Стоит глянуть в настройках вайна по этому поводу, наверняка что-то есть. Если нету, то делаем замену:

proc=(`ps -eo pmem,cmd\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count\
    | sed 's/\/.*\/.*\///g;s/(\\)/\1\1\1\1/g'`)
либо так:
proc=(`ps -eo pmem,cmd\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count\
    | sed 's/\/.*\/.*\///g;s/\\/\//g'`)
Из-за этого символа получился такой вот костыль: один слеш будет обозначать управляющую последовательность, несколько слешев будут превращены в один, и на уровне i3bar оно тоже будет интерпретировано как управляющая последовательность. Жуть.

Еще вопрос, можно watchdog процессы убрать?

proc=(`ps -eo pmem,cmd\
    | grep -v "watchdog"\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count\
    | sed 's/\/.*\/.*\///g;s/\\/\//g'`)
kalterfive ★★
()

Решено:

#!/bin/bash

echo '{"version":1}['
while [ 1 ]; do

    count=27
    
proc=(`ps -eo pmem,cmd\
    | grep -v "watchdog"\
    | sort -k 1 -nr\
    | awk '{print($2);}'\
    | head -$count\
    | sed 's/\/.*\/.*\///g;s/\\\\/\//g'`)

    buffer='['
    for process in "${proc[@]}"; do
    	#process=`echo "$process" | sed 's/\/.*\/.*\///g'`
        buffer=$buffer'{"full_text":"'$process'","color":"#FFFFFF"},'
    done
    buffer=$buffer'{"full_text":"'$date'","color":"#FFFFFF"},'
    buffer=$buffer'{"full_text":"'$time'","color":"#FFFFFF"}],'

    echo $buffer
    sleep 0.5
done

isaq
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.