Сайт | Скачать | Видео | Wiki

Автор Тема: Скрипт по автоматическому переносу "горячих модулей" в базу (modules)  (Прочитано 23500 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
1)как запустить его свёрнутым и 2)как заставит его мигать на панели задач.
По аналогии с netTun :)
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
По аналогии с netTun
А можно подробнее? Где информация?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
GtkStatusIcon, подробнее позже, сейчас макет. При запуске показывает мигающую зелёную галочку, при наведённом курсоре показывает надпись "Найдены новые модули", при клике пишет в консоль "Clicked on tray icon".
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Посмотрел - супер, то что нужно Ещё хорошо бы чтобы при запуске над ним всплывало сообщение "Найдены новые модули" (помимо прочего) (чтобы обратить внимание)
« Последнее редактирование: 06 Июнь 2020, 17:35:09 от Neyel »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
чтобы при запуске
При запуске не знаю как, есть только при наведённом курсоре. Исходник:
Код
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
/* Исполняется по клику */
void tray_icon_on_click(GtkStatusIcon *status_icon, gpointer user_data)
{
printf("Clicked on tray icon\n"); //вывод в консоль
// system("name.sh"); //запуск скрипта
gtk_main_quit(); //выход
}
/* Описание */
static GtkStatusIcon *create_tray_icon() {
GtkStatusIcon *tray_icon;

tray_icon = gtk_status_icon_new();
gtk_status_icon_set_tooltip(tray_icon,"Найдены новые модули."); //всплывающее сообщение
gtk_status_icon_set_from_stock(tray_icon,"gtk-apply"); //тип иконки
gtk_status_icon_set_blinking(tray_icon,TRUE); //моргание
        return tray_icon;
}
/* Главная */
int main(int argc, char **argv) {
        GtkStatusIcon *tray_icon;

        gtk_init(&argc, &argv); //инициализация
        tray_icon = create_tray_icon(); //отсылка к описанию
        gtk_main(); //запуск

        return 0; //возвращает ноль при выходе
}
Makefile:
Код
CC=gcc
FLAGS := $(shell pkg-config --cflags gtk+-2.0)
LIBS := $(shell pkg-config --libs gtk+-2.0)
SOURCES= addModules.c
example-tray-gtk2 : $(SOURCES)
$(CC) -o $@ $(SOURCES) $(FLAGS) $(LIBS)
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Спасибо, думаю реализую. Всплывающее окно сделаю с помощью wt (скрипт от sfs) - оно появится в верхнем правом углу. После запуск иконки в трее, ну и внутри вышеприведённого кода вызов скрипта copy_cold_modules. Вообщем появятся вопросы - отпишусь  :)
UPD Ну и всё это повесить на Пуск->Завершить сеанс.

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Откомпилил на пра. Иконка появляется, галочка мигает, но по клику ничего не происходит (даже не выводится надпись "Clicked on tray icon")
Makefile и addModules.c во вложении - посмотрите, может какой-то косяк
« Последнее редактирование: 07 Июнь 2020, 06:57:23 от Neyel »

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Сделал объявление в контакте  :D https://vk.com/puppyrus

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
по клику ничего не происходит
Моя ошибка, пропустил строку 19. Строку 9 можно будет закоммнтировать или удалить.
« Последнее редактирование: 07 Июнь 2020, 08:54:48 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Итак, всё хорошо  :) Вопрос к sfs - как вывести всплывающее информационное сообщение "Найдены новые модули" в правом верхнем углу?

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
правом верхнем углу?
Примерно так, если ntf использует yad:
Код
yad --posx=$(($(xrandr | awk -F x '/\*/ {print $1}') - 250)) --posy=50
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Код
ntf -in "Найдены новые модули"
Только время не могу задать (висит где-то 5 сек)

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
Итог - два скрипта и один бинарник. Список (в порядке запуска):
1.start_cp_cold_mod:
Код
cd /home/live/
str=$(ls -1 /mnt/.* |egrep '.pfs:$')
if [[ -z "$str" ]]; then
exit
fi
ntf -in "Найдены новые модули"
./example-tray-gtk2

2. example-tray-gtk2

3.copy_cold_modules:
Код
array=( $(ls -1 /mnt/.* |egrep '.pfs:$' |sed 's/\/mnt\/.//' |sed 's/:$//') )
k=1
VAR="true|"
str=""
for i in ${array[@]}
do
str="${str}${VAR}${i}|${k}="
let "k = k+1"
done
st=( $(echo $str | sed 's/=$//') )
number=`ntf -k "$st" "Заголовок" "Текст"`
if [[ -z "$number" ]]; then
exit
fi
listnumber=($number)
for i in ${!listnumber[@]}
do
k=${listnumber[$i]}
let "k = k-1"
listnumber[$i]=$k
done
SYS_DIR="/mnt/home/`egrep -o "(^| )dir=[^ ]+" /proc/cmdline | cut -d= -f2`"
for i in ${listnumber[@]}
do
modules=( $(losetup -a | grep "${array[$i]}" | awk '{print $3}' | sed 's/(//' | sed 's/)//') )
cp $modules "${SYS_DIR}/modules/"
done

Осталось это повесить как-то на Пуск->Завершить сеанс
« Последнее редактирование: 07 Июнь 2020, 17:07:49 от Neyel »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8636
  • Репутация: +187/-2
  • Старый чайник
"Найдены новые модули"
"Временно подключенные модули.
Подключить модули постоянно?"
Осталось это повесить как-то на Пуск->Завершить сеанс
Добавить запуск "start_cp_cold_mod" в /etc/rc.d/rc.shutdown.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Neyel

  • Ветеран
  • *****
  • Сообщений: 1548
  • Репутация: +28/-0
  • Автор темы
"Временно подключенные модули.
Подключить модули постоянно?"
Тогда надо добавить в сообщение отсылку к трею, или вообщее отказаться от иконки в трее - вообщем теряюсь, что посоветуете?