xdg-open на debian 9 не может открыть браузер

Сначала установите веб-репозиторий на свой сервер:

rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 

Затем установите php:

yum install php54w 

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

yum list all | grep php54

Затем найдите пакет и установите пакет.

4
17.06.2018, 00:45
4 ответа

@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, а затем проверить, является ли аргумент файлом, простоПЕРЕЗАПИСАЛ ФАЙЛ!!!Пока -пока дорогая...
10
20.08.2021, 11:16

Подтверждено для Debian 10 (buster ), LXDE, xdg -utils 1.1.3 -1. Похоже на ошибку? Один вариант, не требующий редактирования/usr/bin/xdg-open:

  • Вы можете попросить xdg -открыть использовать обработчик другой среды рабочего стола (ref 1):XDG_CURRENT_DESKTOP=gnome xdg-open https://www.google.com

1
20.08.2021, 11:16

Это также для Debian 10 (buster), LXDEи xdg-utils 1.1.3-1. В скрипте xdg-openесть опечатка, и решение выглядит следующим образом:

    --- /usr/bin/xdg-open   2018-05-20 00:18:48.000000000 +0200
+++ /home/klaumi/bin/xdg-open   2018-09-13 15:15:51.630704599 +0200
@@ -928,7 +928,7 @@
 {

     # pcmanfm only knows how to handle file:// urls and filepaths, it seems.
-    if pcmanfm --help >/dev/null 2>&1 -a is_file_url_or_path "$1"; then
+    if pcmanfm --help >/dev/null 2>$1 -a is_file_url_or_path "$1"; then
         local file="$(file_url_to_path "$1")"

         # handle relative paths

(Обратите внимание, что &в 2>&1необходимо заменить на$)

2
20.08.2021, 11:16

Исправление Сейдзи Адачи, которое он называет временным, хорошо работает для меняhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906766

0
20.08.2021, 11:16

Теги

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