обновил скрипт
+ реализована возможность использовать конфиг файл [необязателен]
+ частично реализована работа с ключами командной строки
+ добавлен еще один графический интерфейс (Tk [wish] ) для вывода перевода

vasek
Но есть одно предложение - как относишься к тому, чтобы при каждом переводе не открывать новое окно диалога, а очищать старое и выводить перевод в этом же окне? Возможно это и лишнее и только усложнит скрипт.
я подумаю как это можно будет проще реализовать, если скрипт не сильно усложнится то почему бы и нет

wau
а deepl только меня в этом скрипте обнуляет
с deepl пока проблемы, будет время постараюсь исправить если это возможно
wau
Как я понял, при наличии скопированного в буфер и потом при просто выделении (первичный буфер) могут быть конфликты - случаются выдачи null.
попробуйте заменить xsel на xclip где буфер сохраняется в переменную, может поможет
wau
доступ к бесплатному сервису DeepL Переводчик был временно отключен.
это из за ограничений deepl, тоже словил когда временно заблокировало, null в программе и та надпись что вы привели на их сайте, проходит довольно быстро, это происходит если слать им через программу большой текст, а слова и маленькие предложения вроде нормально пропускает, если напрямую через их сайт слать большой текст таких проблем нету, хм, надо попробовать разобраться как это обойти

nafanja
для однородности все переменные прописать в фигурные скобки ${x}.
в принципе можно, раньше так и делал, правда из за обилия этих скобочек немного падает восприятие кода

nafanja
кое какие стартовые параметры могут и автоматически определяться langIn langOut dscp и ui.
ну langOut понятно как определять заглянув к примеру в тот же localectl, в старом скрипте даже была такая функция, хотя большого смысла в ней не вижу, для простенького скрипта излишне, а для суровой программы недостаточно, например, русскоговорящий приемлемо владеющий англ. установит английскую локаль и us/ru раскладку и пойми тут какой язык родной рус или англ.
для langIn еще туманнее, единственное что неплохо будет добавить это авто определение языка переводимого текста, для яндекс точно есть да и у других вроде видел
upd: dscp и ui тоже в принципе можно определить но простенький скрипт такими темпами перестанет быть простеньким )

nafanja
можно так же и добавить к набору ui еще и notify-send.
когда еще под гномом сидел и тестировал переводчик первым делом пробовал notify-send, но во первых он не очень хорошо подходит для вывода много строчных текстовых данных, во вторых он не везде работает, в том же sway.

nafanja
а еще можно пользовательский конфиг добавить…
был такой, правда json-овский, реши урезать для упрощения, думаю здесь подойдёт обычный текстовый в баш стиле чтобы можно было через source подключить
временами на форуме(и не только) всплывают разговоры о том как и чем перевести выделенный текст или даже о написании нужной приблуды
встряхнув немного пыли с кода и приведя в божеский вид решил поделится простеньким скриптом дабы не страдать самому а разделить ношу поровну

работает как под Xorg так и под Wayland
переводит текст который выделен(только для Xorg) и/или скопированный (для Xorg и Wayland) в буфер
перевод осуществляется с помощью онлайн сервисов перевода Google и Yandex (для яндекс нужен ключ который легко можно получить по ссылке)


#!/usr/bin/env bash

### Зависимости
# ---------------------------------------
# jq            - работа с json в консоли           [обязательно]
# xsel          - рaбота с буфером в Xorg           [опционально] (для dscp=xorg)
# wl-clipboard  - работа с буфером в Wayland        [опционально] (для dscp=wayland)
# iso-codes     - cписок стран и языков             [опционально] (для --codes-lang, --codes-lang2)
# par (AUR)     - фильтр для форматирования текста  [опционально] (для ui=terminal)
# alacritty     - терминал                          [опционально] (для ui=terminal)
# kdialog       - графический диалог kde            [опционально] (для ui=kdialog)
# zenity        - графический диалог gnome          [опционально] (для ui=zenity)
# yad           - графический диалог gnome          [опционально] (для ui=yad)
# tk            - графический диалог tk(wish)       [опционально] (для ui=wish)

# Переводчики
# google      можно использовать(бесплатно) сразу но не через стандартное API для разработчиков
# yandex      нужно получить(бесплатно) api ключ
#             получить ключ от яндекс translate API
#             https://translate.yandex.ru/developers/keys
#             бесплатный тариф: объем переводимого текста - в размере
#             до 1 000 000 символов в сутки, но не более 10 000 000 символов месяц.

### Значения по умолчанию
#------------------------ config start -----------------------------
langIn=auto               # <auto> автоопределение языка или переводить с
langOut=ru                # переводить на
bufferOut=no              # помещать перевод в буфер
filterIn=no               # применить фильтр для входящего текста (фильтры необходимо прописываются ниже в коде - см. Фильтр(in))
translator=google         # сервис онлайн перевода, один из <google, yandex>
dscp=xorg                 # протокол графического сервера, один из <wayland, xorg>
ui=zenity                 # интерфейс для вывода перевода, один из <cli, terminal, kdialog, zenity, yad, wish>
WxH=800x300               # размер ширины и высоты окна с переводом, в пикселях
CxR=80x12                 # количество колонок и строк в окне терминала с переводом
closingTime=0             # секунд до закрытия окна, 0 - не закрывать
wcm=no                    # показать число символов для входящего текста и его перевода, будет отображаться в заголовке графического интерфейса
yandexApiKey='**************'
#------------------------ config end --------------------------------
# данные значения также можно(не обязательно) поместить в конфиг-файл
# конфиг-файл может находится в одном из указанных мест:
# - рядом с данным скриптом
# - по пути указанном в переменной config, смотри ниже
# - расположение заданно с помощью ключа --config

### Конфиг-файл
# config="${0%/*}/langmi.conf"                       # относительный путь к конфигу (возле скрипта)
# config=$(dirname $(readlink -e "$0"))/langmi.conf  # абсолютный путь к конфигу    (возле скрипта)
# config=''                                          # пользовательский абсолютный путь (указать свой)

### Подключение конфиг-файла если таковой имеется
[[ -f "$config" ]] && source "$config" && __config=" --config $config"

[[ "$bufferOut" == "yes"      ]] && _b=" -b"
[[ "$filterIn"  == "yes"      ]] && __filterIn=" --filter"
[[ "$wcm"       == "yes"      ]] && __wcm=" --wcm"

__size=" --WxH $WxH"
if [[ "$ui"     == "terminal" ]]
  then __size=" --CxR $CxR"
  elif [[ "$ui" == "cli"      ]]
    then __size=""
fi

version=0.7
Help="Использование:
  langmi [options]

  -v, --version       показать версию программы
  -h, --help          показать список параметров командной строки
  -c, --codes-lang    показать список всех двух-буквенных кодов названий языков (en)
      --codes-lang2   показать список всех двух-буквенных кодов названий языков (под локаль)
      --codes-google  показать список поддерживаемых языков - google
      --codes-yandex  показать список поддерживаемых языков - yandex

  Ключи:
  -l, --lang          <код языка>:<код языка> см. --codes-*
      --lang-in       <код языка> С которого переводить или <auto> автоопределение
      --lang-out      <код языка> НА который переводить
  -s, --text-in       <текст> для перевода
  -b, --buffer-out    помеcтить перевод в буфер
      --filter-in     применить фильтр для входящего текста
  -p, --dscp          <wayland, xorg> протокол графического сервера
  -t, --translator    <google, yandex> сервис онлайн перевода
      --config        <путь> к конфиг-файлу
      --ui            <cli, terminal, kdialog, zenity, yad, wish> интерфейс
      --wcm           показать количество символов в заголовке окна перевода
      --WxH           <ширина>x<высота> окна перевода в пикселях
      --СxR           <колонок>x<строк> в окне терминала для вывода перевода
  -n, --closing-time  <секунд> до закрытия окна с переводом

Параметры по умолчанию:
  -l $langIn:$langOut --ui ${ui}${__size} -p $dscp -t $translator -n ${closingTime}${__config}${_b}${__filterIn}${__wcm}

"

### Обработка параметров командной строки
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
  -v | --version      ) echo   $version ;exit              ;;
  -h | --help         ) echo   -n -e "$Help" ;exit         ;;
  -c | --codes-lang   ) jq     -r       '."639-2" | .[] | if .alpha_2 then "\(.alpha_2) \(.name)" else empty end' /usr/share/iso-codes/json/iso_639-2.json ;exit;;
       --codes-lang2  ) eval   "$(jq -r '."639-2" | .[] | if .alpha_2 then @sh "printf \"%s \" \(.alpha_2);gettext --domain=iso_639-2 \(.name);echo" else empty end' /usr/share/iso-codes/json/iso_639-2.json)" ;exit;;
       --codes-google ) curl   -s "https://cloud.google.com/translate/docs/languages" |awk '/^<td/' |awk '{getline s;print $0,s}' |awk -F"[<|>]" '{print $9,$3}' ;exit;;
       --codes-yandex ) curl   -s "https://translate.yandex.net/api/v1.5/tr.json/getLangs" --data "ui=${langOut}&key=${yandexApiKey}" |jq -r '.langs | to_entries | .[] | "\(.key)\t\(.value)"' ;exit;;
  -l | --lang         ) shift; eval $(echo "$1" |awk -F: '{print "langIn="$1";langOut="$2}') ;;
       --lang-in      ) shift; langIn=$1                   ;;
       --lang-out     ) shift; langOut=$1                  ;;
       --ui           ) shift; ui=$1                       ;;
       --WxH          ) shift; WxH=$1                      ;;
       --CxR          ) shift; CxR=$1                      ;;
  -p | --dscp         ) shift; dscp=$1                     ;;
  -t | --translator   ) shift; translator=$1               ;;
  -s | --text-in      ) shift; textIn="$1"                 ;;
       --filter-in    ) filterIn="yes"                     ;;
  -b | --buffer-out   ) bufferOut="yes"                    ;;
  -n | --closing-time ) shift; closingTime="$1"            ;;
       --config       ) shift; [[ -f "$1" ]] && source "$1";;
       --wcm          ) wcm="yes"                          ;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi

# читаем stdin
read -d $? -t 0.2 textIn

### Сохранение буфера в переменную если текст получаем не через консоль(--text-in или stdin)
if [[ -z "$textIn" ]]; then
  case $dscp in
    wayland ) textIn="$(wl-paste -n)" ;;
    xorg    ) textIn="$(xsel -o)"     ;;
  esac
fi

### Фильтр(in)
# фильтры должны идти в подряд без комментариев
if [[ "$filterIn" == "yes" ]]; then
  textIn="$(echo -e -n "$textIn" \
  # | фильтр1  \
  # | фильтр2  \
  )"
fi

TextOutFile="$(mktemp -t translated.XXX)"

### Обращение к сервису перевода и запись ответа в файл
case $translator in
  google )
    TextOutJson="$(curl -s "https://translate.googleapis.com/translate_a/single" --data "client=gtx&dt=t&sl=${langIn}&tl=${langOut}" --data-urlencode "q=$textIn")"
    echo -n "$TextOutJson" | jq -j '.[0] | .[] | .[0]' > "$TextOutFile"
    [[ $langIn == "auto" ]] && langIn="auto($(echo -n "$TextOutJson" | jq -r '.[2]'))"
    ;;
  yandex )
    [[ $langIn == "auto" ]] && langInOut="${langOut}" || langInOut="${langIn}-${langOut}"
    TextOutJson="$(curl -s "https://translate.yandex.net/api/v1.5/tr.json/translate" --data "key=${yandexApiKey}&lang=${langInOut}" --data-urlencode "text=$textIn")"
    echo -n "$TextOutJson" | jq -j '.text[]' > "$TextOutFile"
    [[ $langIn == "auto" ]] && langIn="auto($(echo -n "$TextOutJson" | jq -r '.lang' | awk -F- '{print $1}'))"
    ;;
esac

### Сохранение перевода В буфер
if [[ "$bufferOut" == "yes" ]]; then
  case $dscp in
    wayland ) wl-copy  < "$TextOutFile" ;;
    xorg    ) xsel -bi < "$TextOutFile" ;;
  esac
fi

# Заголовок окна
if [[ "$wcm" == "yes" ]]
  then  Title="$translator :: $langIn[$(echo -e -n $textIn |wc -m)] → $langOut[$(cat  $TextOutFile |wc -m)]"
  else  Title="$translator :: $langIn → $langOut"
fi

### Вывод перевода через UI
eval $(echo "$WxH" |awk -Fx '{print "W="$1";H="$2}')
case $ui in
  cli     ) cat "$TextOutFile" ;;
  terminal) eval $(echo "$CxR" |awk -Fx '{print "C="$1";R="$2}')
            # alacritty -d $C $R -t "$Title" -e $SHELL -c "cat $TextOutFile | par -w ${C}d | less -~" | ( [[ $closingTime > 0 ]] && sleep $closingTime && kill $(pgrep -l --parent $$ | awk '$2 == "alacritty" {print $1}') &> /dev/null) ;;
            R=$(cat $TextOutFile | par -w ${C}d | tee ${TextOutFile}1 | wc -l)
            alacritty -d $C $R -t "$Title" -e $SHELL -c "less -s -~ ${TextOutFile}1"                  | ( [[ $closingTime > 0 ]] && sleep $closingTime && kill $(pgrep -l --parent $$ | awk '$2 == "alacritty" {print $1}') &> /dev/null)
            rm ${TextOutFile}1
            ;;
  kdialog ) kdialog --title "$Title" --geometry $WxH        --textbox="$TextOutFile"  | ( [[ $closingTime > 0 ]] && sleep $closingTime && kill $(pgrep -l --parent $$ | awk '$2 == "kdialog" {print $1}') &> /dev/null) ;;
  zenity  ) zenity  --title "$Title" --width=$W --height=$H --filename="$TextOutFile" --text-info --timeout=$closingTime ;;
  yad     ) yad     --title "$Title" --width=$W --height=$H --filename="$TextOutFile" --text-info --timeout=$closingTime --wrap ;;
  wish    ) echo 'encoding system utf-8
            wm title    .  {'$Title'}
            wm geometry .  '$WxH'
            bind        .  <Key-Escape> {exit 0}
            text        .t -wrap   word -font {-size 10} -yscrollcommand {.s set}
                        .t insert  1.0 [exec cat "'$TextOutFile'"]
            scrollbar   .s -orient vertical -command {.t yview}
            button      .b -text   Exit     -command exit
            pack        .b -side   bottom   -fill x
            pack        .s -side   right    -fill y
            pack        .t -expand yes      -fill both
            if '$closingTime'>0 {after [expr {int('$closingTime'*1000)}] exit}' |wish ;;
esac

rm "$TextOutFile"
exit 0
вешаем всё это дело на хоткей и наслаждаемся жизнью

под вяленым гномом работают оба варианта как dscp=wayland , так и dscp=xorg

upd1
обновил скрипт
+ реализована возможность использовать конфиг файл [необязателен]
+ частично реализована работа с ключами командной строки
+ добавлен еще один графический интерфейс (Tk [wish] ) для вывода перевода

upd2
обновление
+ добавлен графический интерфейс yad
+ реализована работа через конвейер
$ echo "hello" | ./langmi
$ echo "hello" | ./langmi --ui cli
$ ./langmi -h | ./langmi --ui cli --lang-in ru --lang-out en
+ добавлены ключи и их реализация
-b, --buffer-out помещать перевод В буфер
-e, --closing-time секунд до закрытия окна с переводом
-k, --get-keys показать список ключей и их значения
--config использовать указанный конфиг-файл

upd3
  • добавлен ключ –lang для более лаконичного ввода параметров
  • -l, –lang язык in:out
  • добавлен ключ –WxH вместо двух отдельных guiW и guiH
  • –WxH размер окна перевода
  • удалён ключ –get-keys, а взамен значитально переработана справка включающая возможности данного ключа
  • для графического интерфейса yad включен перенос(wrap),
  • оказалось(в отличии от zenity) по умолчанию wrap отключен из за чего длинный перевод прокручивался не вниз а в право
  • добалвена возможность включения фильтров(для форматирования текста) как для входящего текста так и самого перевода
  • –filter-in применить фильтр для входящего текста –filter-out применить фильтр для переведенного текста

upd4
  • убран сервис перевода DeepL (если есть у кого идеи как побороть их нежелание нормально делиться милости просим )
  • добавлена возможность автоопределения входящего языка, указывается как auto, например –lang-in=auto или –lang=auto:ru, установленно по умолчанию
  • опять немного переработана справка, думаю это уже окончательный вид
  • добавлены ключи –codes-google и –codes-yandex выводящих список поддерживаемых языков для указанных сервисов перевода
  • удалён filterOut как излишний
  • добавлен ключ –wcm который показывает в заголовке окна перевода сколько входящих(то что переводим) и исходящих(перевод) символов, по умолчанию отключено wcm=no
  • ну и всякие мелкие исправления по мелочи

upd5
основное нововедение касается возможности использовать терминал для отображения перевода что позволяет избавится от тяжеловестных графических интерфейсов.
Данная возможность полностью реализована для терминала alacritty, хотя ни что не мешает вместо него использовать какой-нибуть другой терминал, изменения должны быть минимальны
Закрытие происходит через нажатие клавишы q (используется less для просмотра), для alacritty также можно настроить закрытие через клавишу ESC, добавив в конфиг ~/.config/alacritty/alacritty.yml строку:
  - { key: Escape, action: Quit }

за включение отвечает
флаг
--ui terminal
конфиг
ui=terminal

помимо прочего добавлен флаг(+ в конфиге)
--CxR отвечающий за количество колонок и строк в окне терминала с переводом

только не путать ui=terminal и ui=cli , cli используется для непосредственной работе в терминале или использование в скриптах, также там не используется форматирование текста а передается как есть, в terminal же используется par шикарная утилита для форматировани, до этого использовал гнутую fmt но она плохо работает с русским да и не имеет поддержки юникода

upd6
в текущем скрипте поправил несколько мелких ошибок, и реализовал возможность автоматического подгона высоты(строк) терминала(ui=terminal) под выводимый перевод

для данного скрипта это скорее всего будут последние правки
как добыть компьютер
и
как победить следуя правилам
Xts
как же все таки скучно, когда что то ломается раз в 5 лет, давно проблем при обнове не было
если скучно то можешь откатиться и снова обновить )))
Xts
есть идейки?
ну, как решение переустановить пакеты с перезаписью 'проблемных' файлов:
$ sudo pacman  --overwrite=* -S пакет1 пакет2...
Bendalf
я же чайник. переносил все папки разом по путям в конфиге . .
так по какому пути вы перенесли тогда базу ? если бы вы действительно так поступили то и проблем было бы меньше
старый DBPath /var/lib/pacman/
новый DBPath /home/var/lib/pacman/
достаточно было просто переместить папку по указанному пути(или скопировать, проверить, а потом удалить старую):
$ sudo mv /var/lib/pacman/ /home/var/lib/pacman/
но как оказалось, судя по картинке база установленных пакетов отсутствует по новому пути /home/var/lib/pacman/local/ а присутствует только один файл ALPM_DB_VERSION

Bendalf
Потом пакман сам себя обновил и перезаписал свой конфиг.
pacman сам себя да ну никак, даже спецом провели, удалил из базы после чего восстановил с перезаписью файлов
$ sudo pacman --overwrite=* -S pacman
как и ожидалось новый pacman.conf лёг рядом как pacman.conf.pacnew а старый остался на месте
предупреждение: '/etc/pacman.conf' установлен как '/etc/pacman.conf.pacnew'
то есть pacman.conf который был изменён пользователем может изменить только сам пользователь, пакман при обновлении проверяет(по md5) если конфиг дефолтный и никем не изменялся то перезаписывает на новый дефолтный, если же он отличается от дефолтного то новый ложится рядом с расширением *.pacnew
возможно вы юзали какой то специфический софт для работы с пакманом или что-то напутали, вариант со сбоем не исключаю он он маловероятен, в любом случае попробуйте воспроизвести пошаговые действия(консольные команды) которые у вас приводят к затиранию конфига пакмана

Bendalf
неделю или две назад я занес его конфиги в noupgrade
конфиг пакмана по умолчанию защищен от перезаписи при обновлении(noupgrade), вы просто продублировали это

Bendalf
просто в другой моей записи(в конце темы) про jdk отчетливо видны как pacman не воспринял изменения в конфиге.
то конфиг сам перезаписывается то пакман его игнорирует, у вас там случайно барабашка на компе не завёлся ?)
по поводу "отчетливо видны" я наверное что-то упустил, рыться уже нету сил, ткните пальцем куда смотреть

Bendalf
red
с какими правами у вас пакеты в базе ?
должно быть drwxr-xr-x root root для папок и rw-r–r– root root для файлов
chown -R root:root ./
у пакетов без проблем
файлы find ./ -type=f -exec chmod -R 644 {} \; владелец рут. = rw- r– r–
папки find ./ -type=d -exec chmod -R 755 {} \; владелец рут. = drwx r-x r-x
chown и chmod это преобразование владений и прав к нужному виду, но тока зачем вы это сделали если и так переносили под суперпользователем, там должно было перенестись всё как надо, вам же нужно было не перезаписывать а найти отличия если таковы имелись, а вы тщательно вымыли предполагаемое орудие убийства чтобы 'помочь' следствию
вот что нужно было сделать:
$ find $(pacman-conf DBPath) -not -user root -o -not -group root
$ find $(pacman-conf DBPath) -type d -not -perm 0755
$ find $(pacman-conf DBPath) -type f -not -perm 0644

Bendalf
последний проблемный chromaprint. который еще не правил права руками…../lib/pacman/local/chromaprint-версия/
файлы не могу посмотреть. папка где дб desc пуста
папка chromaprint-версия 755. владелец рут.
хм, а попробуйте вылечить, потом удалить пакет через pacman а затем снова попробовать установить, ошибка появится ?
и что вы за зеркало используете ?

Bendalf
red
pacman -S lsd
не установит и не обновит, а выдаст ошибку
ая wiki и man читал. -S очень не рекомендуют.
рулит -Syyu
мм, да вообщето когда пишут -S то уже подразумевают что базы недавно были синхронизированы, это как если поход по нужде подразумевает снятие штанов.
а для обновления хватает и одного "y", две "yy" необходимы в процессе смены зеркала для принудительной синхронизации.
Bendalf
я в один приём переносил кэш пакмана, базу из места по умолчанию и через 2 минуты конфиг пакмана изменил на актуальный .
разве ? вы же что-то делали с базой, переносили не знаю что и куда а потом получили на выходе какие-то проблемы с пакетами, я же помню, вот этот пост https://archlinux.org.ru/forum/post/221834/ когда по наитию присмотревшись к одной из ваших картинок что вы тогда выложили и обнаружил несоответствие, ведь уже тогда было несоответствие нахождение реальной базы с конфигом

p.s.
есть еще один способ исправления локальной базы
$ sudo rm -r $(pacman-conf DBPath)local/{пакет1-версия, ...}
$ sudo pacman --dbonly -S пакет1 ...
здесь вместо --overwrite=* используется --dbonly что позволит не трогать файлы пакетов установленных в системе а обновить непосредственно метаданные в базе
Bendalf
red
переустановить все пакеты которые поломались после часа Х
может подскажете пожалуйста как узнать этот самый час?
если теоретически, не проверял на практике, то
поискать оставшиеся поломанные установленные пакеты в базе, после чего отсортировать их по времени записи на диск и взять самый старый, но так как база переносилась и возможно не раз то это вряд ли поможет если час Х был до этого, разве что можно будет оценочно прикинуть по самой старой версии поломанного пакета

но думаю будет проще просто переустановить все пакеты в системе

Bendalf
я переносил под аккаунтом суперпользователя
тогда не совсем понятна проблема с правами
upd: с какими правами у вас пакеты в базе ?
должно быть
drwxr-xr-x root root для папок
rw-r--r-- root root для файлов

Bendalf
скажите пожалуйста , обязательно ли указывать полное имя или достаточно шаблона типа lsd* ?
да лучше полное имя, вернее имя с версией, а то случайно захватите другой пакет, мало ли появится пакет с именем lsdb

Bendalf
да даже если у удалил одну папку с именем пакета - так оно потом скачалось по новой. сейчас то всё на месте.
удалил одну папку ... оно потом скачалось по новой - да не может оно просто так взять и скачать, у вас выйдет ошибка при установке(напрямую или как зависимость) будет ругань на конфликтующие файлы
попробуйте
$ pacman -S lsd
$ sudo rm -r $(pacman-conf DBPath)local/lsd-0.16.0-1
$ pacman -S lsd
не установит и не обновит, а выдаст ошибку
а вот с --overwrite=* всё пройдет как по маслу

Bendalf
chromaprint до этого дня у меня вообще не было. и тех что я перечислил в первом сообщении не было ранее установлено.
так у вас со всеми новыми пакетами проблемы при установке или только с некоторыми ?
Bendalf
Никогда не было и вот опять. теперь с chromaprint
вам просто нужно переустановить все пакеты которые поломались после часа Х, а то будет время от времени вылезать когда подойдут обновления для поломанно-спящих пакетов

апдейт
Bendalf
так оно так же криво и запишет. косяк с выставлением прав.
а при чем здесь права ? вы что не от суперпользователя переносили базу ?