Online video hd

Смотреть красивый видео

Официальный сайт zakonoproekt2010 24/7/365

Смотреть видео бесплатно

10.02.11 12:45 TiGR

Есть проблема![решено] xdg-open в lubuntu не находит .desktop файлы

Проблема возникла уже давненько, сейчас вот решил разобраться, и ничего не смог найти в сети, так что обращаюсь за помощью к сообществу.

Используется lubuntu 10.10, правда несколько модифицированная, в плане состава софта и так по мелочам. Суть проблемы в следующем, для примера:

1
2
3
4
5
6
7
$ xdg-mime query filetype incoming/gridwars_lin.zip
application/zip; charset=binary
$ xdg-mime query default application/zip
file-roller.desktop
$ xdg-open incoming/gridwars_lin.zip
Warning: unknown mime-type for "/usr/share/applications/file-roller.desktop" -- using "application/octet-stream"
Error: no such file "/usr/share/applications/file-roller.desktop"

Далее, как я понял, запускается sensible-browser, в данном случае это опера, которая предлагает открыть этот файл в программе на выбор.

При этом файл, который согласно ошибке "не найден" на самом деле существует:
1
2
$ ls -la /usr/share/applications/file-roller.desktop
-rw-r--r-- 1 root root 1567 2010-09-28 02:51 /usr/share/applications/file-roller.desktop

Причём xdg-open так работает почти для любых типов файлов.

Помогите люди добрые, ежели кто знает в чём тут может быть дело.

Update. Нашёлся баг-репорт с патчем, где всё это исправлено. Заодно оформил баг-репорт на ланчпаде. Как оказалось, скрипт чувствителен к GREP_OPTIONS, сообщил об этом разработчикам.



Self-Perfection 11.02.11 07:14 # +0
xdg-open обычный шелл скрипт, попробуйте протрейсить и посмотреть где спотыкается. Как-нибудь так:

sh -x `which xdg-open` incoming/gridwars_lin.zip
TiGR 11.02.11 08:58 # +0
Ага, спасибо большое. Но яснее не стало. Смотрите, вот код относящийся к делу:

1
2
3
4
5
6
7
8
9
10
11
12
13
        for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do
            file="$x/applications/$default"
            if [ -r "$file" ] ; then
                command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`"
                command_exec=`which $command 2>/dev/null`
                if [ -x "$command_exec" ] ; then
                    $command_exec "$1"
                    if [ $? -eq 0 ]; then
                        exit_success
                    fi
                fi
            fi
        done

А вот фрагмент трейса, полученного через sh -x:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ echo /home/tigr/.local/share:/etc/xdg/lubuntu:/usr/share/Lubuntu:/usr/local/share/:/usr/share/:/usr/share
+ sed s/:/ /g
+ file=/home/tigr/.local/share/applications/file-roller.desktop
+ [ -r /home/tigr/.local/share/applications/file-roller.desktop ]
+ file=/etc/xdg/lubuntu/applications/file-roller.desktop
+ [ -r /etc/xdg/lubuntu/applications/file-roller.desktop ]
+ file=/usr/share/Lubuntu/applications/file-roller.desktop
+ [ -r /usr/share/Lubuntu/applications/file-roller.desktop ]
+ file=/usr/local/share//applications/file-roller.desktop
+ [ -r /usr/local/share//applications/file-roller.desktop ]
+ file=/usr/share//applications/file-roller.desktop
+ [ -r /usr/share//applications/file-roller.desktop ]
+ file=/usr/share/applications/file-roller.desktop
+ [ -r /usr/share/applications/file-roller.desktop ]
+ [ -f /etc/debian_version ]

Последняя строчка - это уже произошёл выход из процедуры, уже выполнение вернулось в предыдущую процедуру. Далее он уже начинает пытаться сделать с файлом "хоть что-то", и это "хоть что-то" выливается в итоге в запуск sensible-browser.

Почему на предпоследней строчке трейса он не входит в условие я не понял. Если в sh сделать

if [ -r /usr/share/applications/file-roller.desktop ]; then echo working; fi;

то всё работает.

Что-то я перестал что-либо понимать. Права на файле: -rw-r--r--, всё должно читаться любым пользователем системы...

Как такое вообще возможно?
Self-Perfection 11.02.11 09:23 # +0
Гм, действительно непонятно. Предлагаю рандомные танцы с бубном:
for shell in bash dash;do $shell `which xdg-open` incoming/gridwars_lin.zip; done

Попробовать заменить в xdg-open некорректно срабатывающее условие на -f или -e.
TiGR 11.02.11 09:48 # +0
Всё попробовал, всё бесполезно. Втыкал в цикл ls, cat. cat не может найти файл. ls - если показывать только директорию, то она показывается, файл в ней виден. А если указывать прямой путь к файлу, то его словно нет. -f -e - ноль эмоций. whoami запущенный внутри процедуры показывает, что работает от моего пользователя.

Зато sudo xdg-open работает.
Self-Perfection 11.02.11 09:40 # +0
strace -e trace=file sh -vx `which xdg-open` incoming/gridwars_lin.zip
TiGR 11.02.11 11:39 # +0
Есть!

1
2
3
+ file=/usr/share/applications/file-roller.desktop
+ [ -r /usr/share/applications/file-roller.desktop ]
stat64("/usr/share/applications/\33[m\33[Kfile-roller.desktop", 0xbf844600) = -1 ENOENT (No such file or directory)

Вот так работает:

GREP_OPTIONS="" xdg-open incoming/gridwars_lin.zip

Поменял GREP_OPTIONS="--color=always" на auto, сообщил разработчикам о чувствительности к GREP_OPTIONS.
Self-Perfection 12.02.11 02:29 # +0
Знаете, это не бага, а сочетание не совсем корректных конфигов.
  1. Выставляя color=always надо понимать, к чему это вообще может приводить
  2. Стандартный убунтовый ~/.bashrc реализует расцвечивание grep'а через
    alias grep='grep --color=auto'
    При задании --color=always через alias проблема бы не возникла
  3. Полагаю, GREP_OPTIONS вы задавали в ~/.bashrc. Вроде бы предполагается, что для гуёвых программ source ~/.bashrc не должен происходить, по крайней мере так стал себя вести мой арч после какого-то апдейта. Окружение для иксовых прог задаётся в ~/.xprofile. Видимо на проблему вы наткнулись при работе с какими-то иксовыми прогами, а значит или лубунту у вас некорректно по-умолчанию сорсит для иксовых программ ~/.bashrc, или вы сами как-нибудь добились такого неканоничного поведения, например, прописыванием source ~/.bashrc в ~/.xprofile. В каноничном случае проблема опять-таки не возникла бы
TiGR 12.02.11 09:35 # +0
Интересно, что во многих скриптах встречается unset GREP_OPTIONS (типа того же apt).

1. По идее, это ни к чему не должно приводить. Если бы это было иначе, в мане грепа было бы предупреждение.
2. Не знаю как сейчас, но эту строчку в .bashrc я добавил ещё тогда, когда дефолтный .bashrc в Ubuntu был почти пустым, и подсветки там точно не было.
3. У меня .xprofile вообще не существует. Но вообще нет, в этом отношении я тут ни с чем не шаманил. Значит, это глюк Lubuntu?
Self-Perfection 13.02.11 03:16 # +0
Занятно, я когда писал предыдущий комментарий во многом исходил из того, что unset GREP_OPTIONS в скриптах не встречается, даже проверил, сделав grep -iR GREP_OPTIONS /etc/rc.d.

  1. Да вот как раз примерно к тому, на что вы наткнулись, и приводит:
    1
    2
    $ for coloring in --color={always,auto}; do echo 'abcdef' | grep $coloring bcd | grep def; done
    abcdef
    Если бы не приводило, то abcdef напечаталось 2 раза
  2. Упоминая про дефолтное содержимое ~/.bashrc я хотел сказать, что гуру считают раскрашивание через alias более правильным. Плохо выразился.
  3. Кроме ощущения, что "это как-то не совсем правильно", у меня нет оснований утверждать, что сорсинг ~/.bashrc для иксовых прог - баг.
TiGR 13.02.11 10:29 # +0
Ясно. Тогда, видимо, я ССЗБ, и, видимо, единственная проблема в том, что в мане нет предупреждения.

Насчёт "многих скриптов" я погорячился. В нескольких встречается.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 156)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3180 из 232 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть онлайн бесплатно

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн