Рабочий стол быстрого доступа к сценарию Bash сбой и ожоги

Абсолютно тривиальный, но эффективный способ решить заданный вопрос - это просто удалить ~/.ecryptfs/wrapped-passphrase (или переименовать его).

Это полностью предотвратит загрузку любых ключей ключом в keyring pam_ecryptfs.

6
задан 27 March 2018 в 09:29

6 ответов

Проблема заключается в том, что сценарий зависит от настраиваемой переменной среды TERM. Ubuntu Unity Desktop не имеет этой инициализации при вызове сценариев. Если вы открываете терминал с помощью Ctrl + Alt + T, эта переменная настраивается.

Чтобы протестировать вашу систему, создайте небольшой скрипт под названием test-term.sh и сделайте так:

#!/bin/bash

#See if $TERM has been set when called from Desktop shortcut

echo TERM environment variable: $TERM > ~/Downloads/test-term.txt
echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt
env | grep TERM >> ~/Downloads/test-term.txt

exit 0
5] Создайте ссылку в Nautilus на test-term.sh и запустите ссылку. Затем проверьте выходной файл:

$ cat ~/Downloads/test-term.txt

TERM environment variable: dumb
Using env | grep TERM output below:
(... blank line appears here ...)

Как вы видите, переменная среды TERM пуста, когда используется команда env | grep TERM. Также переменная $TERM установлена ​​на dumb, которая не очень хорошо подходит для поддерживаемой цветом команды dialog.

Решение для котлоагрегата 8]

Кратковременное решение заключалось в том, чтобы включить шаблонный код в начале двух рассматриваемых сценариев:

# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
    notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
    exit 1
fi

4
ответ дан 22 May 2018 в 11:46
  • 1
    Хотя ответ правильный, что проблема TERM является проблемой, она обычно устанавливается только терминальными эмуляторами и консольными программами. Вы не должны его устанавливать; установка TERM вручную - это указание на то, что что-то еще неправильно настроено. Хотя часто это делается, например, для включения 256 цветных выходов в общих терминалах. – muru 27 March 2018 в 02:58
  • 2
    @muru Да, я быстро обнаружил это из последующих чтений. Вместо этого я изменил сценарий с сообщением notify-send на Рабочий стол, который отсутствует в TERM. Я скоро обновлю исходные скрипты. – WinEunuuchs2Unix 27 March 2018 в 03:01
  • 3
    Я думаю, что вы можете обойти эту проблему, если поместить в строку Exec в файл рабочего стола что-то вроде следующего: xterm -e /path-to/your-script. Конечно, это предполагает, что установлен xterm. Вы можете добавить опции для улучшения графики, например xterm -fa default -fs 13 -e /path-to/your-script – sudodus 27 March 2018 в 09:44

Проблема заключается в том, что сценарий зависит от настраиваемой переменной среды TERM. Ubuntu Unity Desktop не имеет этой инициализации при вызове сценариев. Если вы открываете терминал с помощью Ctrl + Alt + T, эта переменная настраивается.

Чтобы протестировать вашу систему, создайте небольшой скрипт под названием test-term.sh и сделайте так:

#!/bin/bash #See if $TERM has been set when called from Desktop shortcut echo TERM environment variable: $TERM > ~/Downloads/test-term.txt echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt env | grep TERM >> ~/Downloads/test-term.txt exit 0

Создайте ссылку в Nautilus на test-term.sh и запустите ссылку. Затем проверьте выходной файл:

$ cat ~/Downloads/test-term.txt TERM environment variable: dumb Using env | grep TERM output below: (... blank line appears here ...)

Как вы видите, переменная среды TERM пуста, когда используется команда env | grep TERM. Также переменная $TERM установлена ​​на dumb, которая не очень хорошо подходит для поддерживаемой цветом команды dialog.

Решение для котлоагрегата

Кратковременное решение заключалось в том, чтобы включить шаблонный код в начале двух рассматриваемых сценариев:

# $TERM variable may be missing when called via desktop shortcut CurrentTERM=$(env | grep TERM) if [[ $CurrentTERM == "" ]] ; then notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable." exit 1 fi
4
ответ дан 17 July 2018 в 18:02

Проблема заключается в том, что сценарий зависит от настраиваемой переменной среды TERM. Ubuntu Unity Desktop не имеет этой инициализации при вызове сценариев. Если вы открываете терминал с помощью Ctrl + Alt + T, эта переменная настраивается.

Чтобы протестировать вашу систему, создайте небольшой скрипт под названием test-term.sh и сделайте так:

#!/bin/bash #See if $TERM has been set when called from Desktop shortcut echo TERM environment variable: $TERM > ~/Downloads/test-term.txt echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt env | grep TERM >> ~/Downloads/test-term.txt exit 0

Создайте ссылку в Nautilus на test-term.sh и запустите ссылку. Затем проверьте выходной файл:

$ cat ~/Downloads/test-term.txt TERM environment variable: dumb Using env | grep TERM output below: (... blank line appears here ...)

Как вы видите, переменная среды TERM пуста, когда используется команда env | grep TERM. Также переменная $TERM установлена ​​на dumb, которая не очень хорошо подходит для поддерживаемой цветом команды dialog.

Решение для котлоагрегата

Кратковременное решение заключалось в том, чтобы включить шаблонный код в начале двух рассматриваемых сценариев:

# $TERM variable may be missing when called via desktop shortcut CurrentTERM=$(env | grep TERM) if [[ $CurrentTERM == "" ]] ; then notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable." exit 1 fi
4
ответ дан 23 July 2018 в 18:53

«Решение» - это не многократно запускать программы за пределами их требуемой среды, не проверяя их статус выхода. dialog, whiptail и т. д. предназначены для терминалов, поэтому они, конечно, требуют установки TERM. Поэтому вы должны запускать эти сценарии в терминале. То же самое произошло бы с вашим «продвинутым» zenity, yad и т. Д., Если он будет работать без дисплея X11 / Wayland.

В вашем скрипте вы проверяете вывод dialog, в то время как вывод ошибки перенаправления с помощью обычный мощность. Поэтому, когда диалог «сбой и ожоги» и печатает сообщение об ошибке, вы затем сравниваете вывод ошибки в своих условиях if! Зачем вам это делать?

0
ответ дан 22 May 2018 в 11:46

«Решение» - это не многократно запускать программы за пределами их требуемой среды, не проверяя их статус выхода. dialog, whiptail и т. д. предназначены для терминалов, поэтому они, конечно, требуют установки TERM. Поэтому вы должны запускать эти сценарии в терминале. То же самое произошло бы с вашим «продвинутым» zenity, yad и т. Д., Если он будет работать без дисплея X11 / Wayland.

В вашем скрипте вы проверяете вывод dialog, в то время как вывод ошибки перенаправления с помощью обычный мощность. Поэтому, когда диалог «сбой и ожоги» и печатает сообщение об ошибке, вы затем сравниваете вывод ошибки в своих условиях if! Зачем вам это делать?

0
ответ дан 17 July 2018 в 18:02

«Решение» - это не многократно запускать программы за пределами их требуемой среды, не проверяя их статус выхода. dialog, whiptail и т. д. предназначены для терминалов, поэтому они, конечно, требуют установки TERM. Поэтому вы должны запускать эти сценарии в терминале. То же самое произошло бы с вашим «продвинутым» zenity, yad и т. Д., Если он будет работать без дисплея X11 / Wayland.

В вашем скрипте вы проверяете вывод dialog, в то время как вывод ошибки перенаправления с помощью обычный мощность. Поэтому, когда диалог «сбой и ожоги» и печатает сообщение об ошибке, вы затем сравниваете вывод ошибки в своих условиях if! Зачем вам это делать?

0
ответ дан 23 July 2018 в 18:53

Другие вопросы по тегам:

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