Как отобразить (zenity/GUI) диалоговое окно пользователю после того, как корневая задача крона завершилась

Если у Вас есть аппаратные средства (или более точно встроенное микропрограммное обеспечение, т.е. BIOS) поддержка зашифрованных дисков, то можно зашифровать полный диск со встроенным микропрограммным обеспечением. Существуют оборотные стороны к выполнению этого: нет многих компьютеров вокруг того шифрования диска поддержки, и оно связывает Вас с конкретным встроенным микропрограммным обеспечением (или хуже, если Ваш компьютер имеет TPM, и ключ шифрования находится в TPM, оно связывает Вас с этой конкретной материнской платой, если Вы не создали резервную копию ключа шифрования хранилища).

Если операционная система делает шифрование, то должно быть небольшое пространство на диске, который не шифруется, где начальные части операционной системы хранятся. Общая конфигурация с Linux должна иметь отдельный открытый текст /boot раздел, и зашифровать любой раздел. “Полное шифрование диска” является чем-то вроде неправильного употребления: это обычно используется для значения “полного шифрования объема”, где объем обычно является разделом, а не диском. Полное шифрование диска состоит в том, когда Вы не шифруете каждый файл (или по крайней мере дерево каталогов) отдельно.

В соответствии с Linux, стандартный инструмент для полного шифрования диска является dmcrypt. Это доступно во всех основных дистрибутивах и интегрированное во многих установщиках.

3
13.04.2017, 15:36
4 ответа

На основе ответа Mel Boyce вот то, что работало на меня. Это основано на KDE. Но я также протестировал его с Zenity и теми же работами подхода. Это - в основном то же самое рекомендуемый Mel Boyce, но с несколькими тонкими настройками, чтобы заставить это работать на меня. Я не удаляю файл updateNotification.txt, например. И я не использую printf.

updater сценарий включает это:

DATE_STAMP=` date`
echo "\t***The software has been updated to version ${LATEST} on ${DATE_STAMP}***"
echo "The software has been updated to version ${LATEST} on ${DATE_STAMP}. Please close and reopen the program if it is current running. If you have any issues or questions, please write us at support@example.com. Thank you." > /home/$USERN/.updateNotification.txt

Затем у нас есть сценарий, работающий в/home/$USERN/.kde/Autostart/updateNotificationChecker.sh

#!/bin/bash
while true; do
    if [[ -s ~/.updateNotification.txt ]]; then
                read MSGFE < ~/.updateNotification.txt 
                kdialog --title 'The software has been updated' --msgbox "$MSGFE"
                cat /dev/null > ~/.updateNotification.txt
    fi
    sleep 300
done
exit 0
0
27.01.2020, 21:28

Попытайтесь добавить что-то как следующее к Вашему ~/.xinitrc (или ~/.xsession если Вы используете менеджера по входу в систему):

while true; do
    if [[ -a ~/.messages ]]; then
        zenity --info --text="$(printf "%q" $(cat ~/.messages))"
        rm ~/.messages
    fi
    sleep 10
done &

Я не протестировал это с zenity, поскольку у меня нет его, и я принимаю это .xsession работы как ожидалось - я никогда не использовал менеджера по входу в систему.

while/done блок выполнится неограниченно долго с десятисекундной задержкой между проверками ( sleep 10 часть). Каждый раз существует проверка, if защита успешно выполняется, если существует непустой названный файл .messages в homedir пользователя. На успехе содержание файла читается в zenity, и файл удален.

Я не взволнован с printf рвота, но это должно быть прекрасным.

Содержание, которое помещается в ~/.messages должен быть перенаправлен от крона, и необходимо будет удостовериться, что Вы изменяете владельца и группу файла соответственно. Возможно, что-то как:

10 * * * * /usr/bin/mything && echo "mything completed" > /home/username/.messages && chown username:groupname /home/username/.messages
1
27.01.2020, 21:28
  • 1
    Спасибо! я протестирую это сегодня. Это походит точно, в чем я нуждаюсь. Я предполагаю, что это будет работать и если это сделает, то я приму Ваш ответ. –  MountainX-for-Monica 25.06.2013, 20:51
  • 2
    Это близко, но Ваши опасения по поводу printf были обоснованными. Когда я получаю окончательную версию, которая работает, я могу отправить ее здесь. Но я думаю, что понятие является правильным.Спасибо. –  MountainX-for-Monica 26.06.2013, 04:25
  • 3
    на самом деле, я не могу заставить это работать... –  MountainX-for-Monica 27.06.2013, 06:56
  • 4
    Какова проблема? –  Mel Boyce 27.06.2013, 15:36
  • 5
    , я добавил ответ с решением, что я наконец получил работу. Это очень близко к тому, что Вы предложили.Спасибо! –  MountainX-for-Monica 27.06.2013, 20:12

Вот отчет обо всем, что я нашел до сих пор:

Это решение от Спрашивает Ubuntu

Это в настоящее время работает на меня, и я не видел проблем до сих пор:

        ACTIVE=$(ck-list-sessions | awk -F' = ' '
            function f(){if(A=="TRUE"){P=U"\t"D;gsub("'"'"'","",P);print P}}
            $1=="\tunix-user"{U=$2} 
            $1=="\tx11-display"{D=$2} 
            $1=="\tactive"{A=$2} 
            END{f()} /^[^\t]/{f()}
        ')
        USERID=${ACTIVE%    *} # tab
        USERNAME=$(getent passwd $USERID|cut -f1 -d':')
        DISPLAY=${ACTIVE#*  } # tab

        DISPLAY="$DISPLAY" su $USERNAME -c "zenity --info --title='My Title' --text='My text. Notice the single quotes.'"

Но я тестировал уведомление - отправляют команду (упомянутый здесь), и это, казалось бы, еще более подходило бы для моей ситуации....

К сожалению, это имеет недостаток в KDE, который уведомления скрывают вскоре, и я не нашел способ отключить тот тайм-аут (-t 0, не работал). Для моего существующего примера использования я склонен любить диалоговое окно, которое должно быть отклонено нажатием кнопки. Так или иначе вот детали, уведомляют - отправьте:

уведомьте - отправляют команду

Уведомление - отправляет, команда позволяет Вам отправлять настольные уведомления пользователю через демона уведомления из командной строки. Это полезно, чтобы сообщить настольному пользователю о событии или отобразить некоторую форму информации без того, чтобы стоять на пути. Необходимо установить следующий пакет:

$ sudo apt-get install libnotify-bin

В этом примере отправьте простое настольное уведомление от командной строки, войдите:

notify-send "rsnapshot done :)"

Однако в процессе поиска решений, я также нашел что-то, что я абсолютно люблю! Я буду удалять все вызовы в Zenity во всех моих сценариях и заменять их easybashgui.

easybashgui

http://sites.google.com/site/easybashgui/

EasyBashGUI является библиотекой функций Bash для *BSD и GNU/Linux, который имеет целью давать простые функции графического интерфейса пользователя с помощью yad, gtkdialog, kdialog, zenity, Xdialog, (c) диалоговое окно, whiptail или колотить builtins в зависимости от KDE или выполнения GNOME или нет, Yad/Gtkdialog/Xdialog установленный или не и, в конечном счете, выполнения X-сервера или нет.

Я также нашел Yad, который заменит Zenity для меня в будущем. easybashgui может использовать/называть Zenity, yad, gtkdialog, kdialog, Xdialog, (c) диалоговое окно, whiptail или колотить builtins. Таким образом, я буду постепенно сокращать Zenity и использовать yad в соответствующих случаях.

yad

Отобразите графические диалоговые окна из сценариев оболочки или командной строки - Google Project Hosting http://code.google.com/p/yad/

Yad (еще одно диалоговое окно) является ветвлением Zenity со многими улучшениями, такими как пользовательские кнопки, дополнительные диалоговые окна, всплывающее меню в значке уведомления и т.д.

Было две главных причины сделать это ветвление. Первый должен удалить зависимости от библиотек устаревших, таких как libglade и холст гнома. И второй - что касается меня, Zenity похож на заброшенный проект. Его ChangeLog состоит из просто "версии удара к..." и "перевод, обновленный" в течение долгого времени, но многими интересными идеями, которые проигнорированы разработчиками/специалистами по обслуживанию, было в GNOME Bugzilla.

примечание

Как don_crissti упоминания, решения по этому unix.stackexchange.com являются, вероятно, соответствующими:

Откройте окно на удаленном X дисплеев (почему "Не может открыть дисплей")?

0
27.01.2020, 21:28
  • 1
    @don_crissti - Спасибо. Это кажется, что у Вас есть большой опыт в этой области. Вы согласовываете это notify-send наилучший вариант или Вы, думают, что одна из других опций лучше? –  MountainX-for-Monica 23.06.2013, 07:59

Моя система является человечностью 13.04. Я запустил скрипт, подобный Вашему, через anacrontab, и он работает. Попробуйте это..

Настройте свой crontab..

$ cat /path/crontabfile
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

*   *   *   *   *   /bin/bash /path/anacron-tst/s1.sh

АЛЬТЕРНАТИВА: Настройте свой anacrontab..

$ cat /etc/anacrontab
### original
.. ,, ..
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

# These replace cron's entries
1   5   cron.daily  run-parts --report /etc/cron.daily
7   10  cron.weekly run-parts --report /etc/cron.weekly
@monthly    15  cron.monthly    run-parts --report /etc/cron.monthly
### end-original

### my custom lines ..
SHELL=/bin/bash
HOME=/home/me
LOGNAME=me

1   2   me1 /bin/bash /path/anacron-tst/s1.sh

В Вашем сценарии..

$ cat /path/anacron-tst/s1.sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

export DISPLAY=:0.0
export XAUTHORITY=/home/me/.Xauthority

zenity --question --text "Backup time .. is HDD connected?"

if [ $? -ne 0 ]; then
    echo "No confirmation .. quiting"
    exit 1
else
    echo "Will attempt backup now .."
fi

Это от человека 5 anacrontab..

.. lines can be of three kinds:  job-description lines, environment assignments, or empty lines.

Environment assignment lines are of the form: VAR = VALUE
.. ,, ..
The assignment takes effect from the next line to the end of the  file,  or
to the next assignment of the same variable.

Это работает с crontab, установленный для корня. Обратите внимание на то, что я отредактировал сценарий для включения строки, "экспортируют XAUTHORITY =/home/me/.Xauthority". Этому нужно это для работы.

1
27.01.2020, 21:28
  • 1
    с помощью anacrontab вместо crontab является хорошим предложением. Но в моем случае, скрипт также должен быть запущен как корень. –  MountainX-for-Monica 23.09.2013, 03:49
  • 2
    Это работает с crontab, установленный для корня. Обратите внимание на то, что я отредактировал сценарий для включения строки, "экспортируют XAUTHORITY =/home/me/.Xauthority". Этому нужно это для работы. Уверенный –  Randy Skretka 23.09.2013, 23:22

Теги

Похожие вопросы