LINUX.ORG.RU

[bash+button]Вместо двух значков - один


0

0

У меня сейчас на рабочей поверхности два значка - видеонабл. вкл и видеонабл. выкл. Содержимое их - motion и killall motion. Очень плохо понимаю if-else-fi и потому прошу помощи у вас. Каким должен быть скрипт на баше, чтобы учитывать текущее состояние приложения и включать/выключать его в зависимости от этого состояния?

★★★★★
Ответ на: комментарий от minakov

На данный момент получился только такой неработающий скрипт(хвастаюсь как не надо делать):

#!/bin/bash
motipid = pidof motion

if [-x $motipid]; then
	echo Stopping motion && kill $motipid
else
	echo No process to stop && motion
fi

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

Вот это заработало...
А то мучал if [«$(pidof motion)»]; then и ничего

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

Спасибо, то же работает.. Правда плохо улавливаю смысл всего этого, но робит :)

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

Ага, костыль с файлом :) Блин, учиться, учиться и еще раз учиться. Пойду курить мануалы, оказывается интересная вещь этот баш

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

Еще один вопрос если можно :)
Вот к примеру корзина - в нее файл попадает и она меняет значок. А возможно ли повлиять на этот .desktop файл, чтобы заменить при включении Icon=/usr/share/icons/my.svg на Icon=/usr/share/icons/my_on.svg и обратно?

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

>> Ага, костыль с файлом :)

Это не костыль, а стандартный подход для сервисов.

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

>> Icon=/usr/share/icons/my.svg на Icon=/usr/share/icons/my_on.svg

sed -i 's%Icon=/usr/share/icons/my.svg%Icon=/usr/share/icons/my_on.svg%' /path/to/ololo.desktop

Как заменить обратно, думаю, понятно.

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

Благодарность здесь выражают традиционным способом, как-то так:

Спасибо, товарищ.

:) А рейтинг растёт в зависимости от активности пользователя.

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

Да я знаю, не первый день :) А с кнопкой то не получилось - описание пути значка меняется, а вот сам значок нет. Придется оставить как есть и смотреть как корзинка устроена.

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

В итоге получилась такая конфигурация:

Два svg файла: один с белым маячком(camera из faenz'ы(Да, дефолт для убунтофилов)), другой с красным.

Два .desktop файла(не осиливаю я пока нормальный bash скриптинг) с соответствующим содержимым: данные о значке и имя кнопки(вкл+выкл)

Сам menu.sh, на который ссылаются оба файла:

#!/bin/bash

BIN=/usr/bin/motion
LOCK=/var/lock/_my_motion_.lock

if [ -e $LOCK ]; then
 killall $(basename $BIN)
 rm $LOCK
 rm /home/arthur/Рабочий\ стол/motion.desktop
 cp /home/arthur/.ico/motion.desktop /home/arthur/Рабочий\ стол/motion.desktop
else
 $BIN &
 touch $LOCK
 rm /home/arthur/Рабочий\ стол/motion.desktop
 cp /home/arthur/.ico/motion-on.desktop /home/arthur/Рабочий\ стол/motion.desktop
fi

Voila, все работает как положено, правда слишком много почти одинаковых файлов для данного примера. Но для начала сойдет. После загрузки гнома на раб.поверхности торчит значок камеры с названием «Видеонаблюдение вкл.», при нажатии на который включается motion, регистрируются движения и исходный значок заменяется значком с красным маячком и названием «Видеонаблюдение выкл.», после нажатия на который цикл начинается с начала.

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

> [[ $(pidof motion) ]] && killall motion || motion

достаточно killall -q motion || motion

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