apt :Запрос установленных пакетов из определенного источника

Обратите внимание, что в каталоге ~/.wine/dosdevicesсимволические ссылки d:и g:указывают на /media/user_family/Geom-9(, который, как я полагаю, является точкой монтирования компакт-диска ), а d::и g::указывают на /dev/sr0, который является устройством для привода компакт-дисков.

Пока Wine не запущен, удалите лишние символические ссылки g:и g:::

rm ~/.wine/dosdevices/g: ~/.wine/dosdevices/g::

После удаления дубликатов ваш дисковод для компакт-дисков должен остаться с буквой D :.


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

По умолчанию он монтирует компакт-диски для любого локального пользователя в местоположении /media/<username>/<CD volume name>. Установив ENV{UDISKS_FILESYSTEM_SHARED}="1"в правиле udev, применяемом к вашему приводу компакт-дисков, вы можете изменить путь по умолчанию просто на /media/<CD volume name>. Но это вам не поможет, так как метка тома компакт-диска по-прежнему используется как часть имени точки монтирования, а это — это то, чего wineвообще не запрограммировано ожидать -по крайней мере пока нет.

Но вы можете попробовать поместить эту строку в свой /etc/fstabфайл:

/dev/sr0 /media/cdrom iso9660,udf ro,noauto,user 0 0

Затем используйте sudo mkdir /media/cdrom, чтобы создать пустой каталог, который будет использоваться в качестве точки монтирования для всех ваших компакт-дисков.

Это должно переопределить обработку udisks2вашего дисковода компакт-дисков и указать системе, что любой компакт-диск должен быть смонтирован в эту конкретную точку монтирования, независимо от метки тома. Это старый -школьный способ использования дисководов компакт-дисков в Linux, и это то, что wineожидает в настоящее время.

Но когда дисковод компакт-дисков указан в списке /etc/fstab, то udisks2он может или не может быть вообще пропущен :вы можете потерять функцию монтирования на основе графического интерфейса -для дисковода компакт-дисков (У меня нет t проверил это на Ubuntu 19.04 ). Но если это так, то теперь вы сможете использовать команды mount /media/cdromи umount /media/cdromкак обычный пользователь, даже не используя sudo. Так что было бы довольно просто написать скрипт с тремя командами:

#!/bin/sh

mount /media/cdrom     # mount the CD before starting wine
wine <your educational program and its options, if any>
umount /media/cdrom    # unmount the CD after wine exits

...а затем используйте этот сценарий (, возможно, в виде красивой иконки GUI или пункта меню )для запуска образовательной программы.

1
25.01.2021, 17:04
2 ответа

Не зацикливаться на пакетах:

dpkg -l | awk '/^ii/ { print $2 }' | xargs apt-cache showpkg |
awk "/^Package:/ { package = \$2 } /$1/ { print package }" | uniq

Это занимает пару секунд в моей системе с более чем 6000 установленных пакетов и не требует прямого использования /var/lib/apt.

Есть несколько ограничений, в частности, не проверяется, какая версия установлена ​​в данный момент и какая из них доступна в репозиториях, а также то, что Debian не предоставляет никакого способа определить, какая версия репозиторий, из которого был фактически установлен пакет.

2
18.03.2021, 22:34

Этот берет только 0m3.654s, но использует /var/lib/apt.

#!/bin/bash
fqdn=$1
for pkg in $(dpkg-query --show | awk -F "[ \t:]" '{print $1;}'); do
  if grep -q "Package: $pkg" /var/lib/apt/lists/${fqdn}_*_Packages; then
    echo $pkg
  fi
done

Я понимаю, что /var/lib/aptявляется внутренним по отношению к apt, поэтому aptможет изменить реализацию и сломать скрипт. Вероятно, это маловероятно, но может случиться. Вместо этого обычно лучше использовать инструменты aptдля доступа к этим данным.

1
18.03.2021, 22:34

Теги

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