Обратите внимание, что в каталоге ~/.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 или пункта меню )для запуска образовательной программы.
Не зацикливаться на пакетах:
dpkg -l | awk '/^ii/ { print $2 }' | xargs apt-cache showpkg |
awk "/^Package:/ { package = \$2 } /$1/ { print package }" | uniq
Это занимает пару секунд в моей системе с более чем 6000 установленных пакетов и не требует прямого использования /var/lib/apt
.
Есть несколько ограничений, в частности, не проверяется, какая версия установлена в данный момент и какая из них доступна в репозиториях, а также то, что Debian не предоставляет никакого способа определить, какая версия репозиторий, из которого был фактически установлен пакет.
Этот берет только 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
для доступа к этим данным.