Для операционных систем на базе Debian -где настраиваются ярлыки запуска?

@user310685 почти понял -, но ОПРЕДЕЛЕННО НЕПРАВИЛЬНО. Это исправление «работает» только тогда, когда xdg-openявляется НЕ заданным «голым» путям к файлам (, то есть без начального «файла ://» схемы URI и двойной -косой черты )или файл -спланированный URI (, то есть с начальным «файл ://» ). Эти два типа аргументов должны иметь xdg-openотсрочку до pcmanfm, но они этого не сделают.

Фактическая ошибка не является ошибкой перенаправления STDERR. Скорее, сценарист перепутал testоператор «и» и соединитель «и» в списке процессов оболочки. Один (ошибочно )используется как «-a»; правильный "&&".

В качестве справки я воспроизвел исходную строку сценария, мое исправление для этой строки и предложение «ужас из ужасов» от @user310685:

#ORIG#   if pcmanfm --help >/dev/null 2>&1 -a is_file_url_or_path "$1"; then
#FIXED#  if pcmanfm --help >/dev/null 2>&1 && is_file_url_or_path "$1"; then
#HORROR# if pcmanfm --help >/dev/null 2>$1 -a is_file_url_or_path "$1"; then

Цель if..; thenуказана в строке скрипта чуть выше:

# pcmanfm only knows how to handle file:// urls and filepaths, it seems.

Имея в виду этот комментарий, способ понять проблемную строку if.. thenтаков::

  1. Проверить работоспособность pcmanfm(, сообщив о собственной справке и отбросив все STDOUT или STDERR)
  2. И запустите скрипт -function is_file_url_or_path(), чтобы затем проверить, является ли аргумент "$1"приемлемым дляpcmanfm(в соответствии с приведенным выше комментарием к коду )
  3. .

Если выполняются оба этих условия,затем сценарий переходит в короткий блок, который:

  1. Вызывает скрипт -функцию file_url_to_path(), чтобы удалить любую начальную часть «файла ://» (как локальную переменнуюfile)
  2. Если результат НЕ является абсолютным путем (, т. е. не начинается с «/» ), добавьте CWD перед значениемfile
  3. Выполнитьpcmanfm "$file"

Почему исходный сценарий не работает:

Как отмечалось выше, сценарий (ошибочно )использует «-a» в качестве «списка процессов и оператора». Что на самом деле происходит, так это то, что оболочка запускает команду (после того, как перенаправления STDOUT и STDERR «извлекаются» из команды, которым разрешено находиться в любом месте последовательности командных слов после первого слова ):

.

pcmanfm --help -a is_file_url_or_path "$1"

Этот всегда завершается успешно (, если только pcmanfmне является исполняемым в PATH ). Все лишнее в командной строке(-a..)игнорируется pcmanfm, работающим в режиме --help. Таким образом, кодовый блок «процесс как файл или файл -URL» всегда выполняется. При задании URL-адреса (с частью схемы )функция file_url_to_path()скрипта -удаляет только начальный «файл ://», обрезает любой завершающий фрагмент «#...", а также URI -декодирует аргумент (, т.е. "%XX" преобразуется в ASCII ). ПРИМЕЧАНИЕ. :Если аргумент не начинается с «file :///», ничего не делается.

Например, URL-адрес OP «https://www.google.com» не меняется на file_url_to_path(), поскольку он не начинается с «файл :///».НОболее поздний код считает этот аргумент «относительным путем», поскольку он явно не начинается с «/». Таким образом, он добавляет CWD в начало, как описано, а затем pcmanfmпочти наверняка НЕ ​​найдет это удаленное значение как существующий путь для отображения. Вместо этого он показывает всплывающее сообщение об ошибке -, как и в вопросе ОП.

Исправление:

Достаточно просто :используйте правильный синтаксис для цепочки процессов И -оператор :"&&", как показано в строке #FIXED#выше.

УЖАС от предложения @user310685:

То, что предлагает @user310685, вроде как решает одну проблему. Что происходит, так это то, что оболочка покорно выполняет расширение переменных, а затем пытается выполнить что-то вроде:

pcmanfm --help >/dev/null 2>https://www.google.com -a is_file_url_or_path https://www.google.com

Это почти наверняка приведет к ошибке перенаправления оболочки (, если CWD не имеет папки (в нужном месте )с именем «https :» -, которую он мог ). Эта ошибка перенаправления отправляет сообщение в STDERR, а затем оболочка продолжает работу. Поскольку эта ошибка произошла в блоке if.. else.. fi, оболочка берет часть else.. fi, чего хочет @user310685. Таким образом, проблема решена...

НО КАКОЙ ЦЕНОЙ???

Есть две проблемы с этим -не совсем -правильным исправлением:

  1. Когда на самом деле указан путь или файл -спланированный URL, выполняется неправильный путь кода (часть else.. fi). Это связано с тем, что предполагаемая цепочка процессов на самом деле представляет собой всего один процесс, который (почти )всегда генерирует ошибку перенаправления оболочки, которая воспринимается как условие if.. ;как «ложное». Это не так уж плохо, так как этот else.. fiблок просто откладывает работу на другую функцию скрипта -с именем open_generic(), которая предназначена для обработки путей и файлов -URL-адресов (, но не использует pcmanfmдля выполнения работы, а какой-то другой сложный код -путь, который я не анализировал, но, как я полагаю, выполняет честную работу ). Но ПОДОЖДИТЕ! УЖАС...
  2. Посмотрите еще раз на pcmanfm --help...расширенную строку скрипта, которую пытается выполнить оболочка. Обратите внимание на перенаправление STDERR. Подумайте, что произойдет, если это будет сделано с допустимым путем, например «/home/user/precious». OMGПопытка проверить, доступен ли pcmanfm, а затем проверить, является ли аргумент файлом, простоПЕРЕЗАПИСАЛ ФАЙЛ!!!Пока -пока дорогая...

0
09.10.2021, 21:50
1 ответ

Если вы установили пакет с помощью sudo apt install signal-desktopв соответствии с инструкциями на странице загрузки signal.org, тогда должен быть другой (системный -широкоформатный )файл рабочего стола по адресу /usr/share/applications/signal-desktop.desktop.

Если щелкнуть правой кнопкой мыши -пункт меню Signal (env), предложит ли он какой-либо параметр «свойства» или что-то подобное? Это может рассказать вам больше о том, где он живет.

Похоже, что в Cinnamon есть специальный редактор меню, доступ к которому можно получить, -щелкнув правой кнопкой мыши значок Mint в нижнем -левом углу, выбрав Configure...,затем выберите вкладку «Меню» и нажмите Open the menu editor.

1
10.10.2021, 01:43

Теги

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