Ошибка графики kvm Spice: не удалось get_drawable

Недавно я оказался в похожей ситуации. Мне нужен был способ получить xorg (просто xorg, а не полный рабочий стол ubuntu) на автономный сервер Ubuntu. Я подумал: «Эй, он есть в Ubuntu Desktop, он должен быть на DVD». К сожалению, общее предложение использовать apt-cdrom для установки пакетов в автономном режиме с DVD Desktop Edition немного устарело или по адресу по крайней мере, к сожалению, не конкретный. Предположительно («предположительно», потому что я еще не подтвердил это для себя…) процедура работает только с DVD-дисками Alternate Desktop Edition (т.е. Kubuntu / Lubuntu / Xubuntu - см. здесь для дополнительную информацию), а не официальный DVD Ubuntu Desktop Edition. Насколько я могу судить, официальные образы DVD для настольных компьютеров были сильно урезаны для уменьшения размера файла, начиная с версии 10.04 (или, возможно, даже раньше):

$ sudo mount /dev/cdrom /media/cdrom  # ubuntu-14.04.4-server-amd64.iso
$ du -ach /media/cdrom/pool
[…]
461M total

$ sudo umount /dev/cdrom
$ sudo mount /dev/cdrom /media/cdrom  # ubuntu-14.04.4-desktop-amd64.iso
$ du -ach /media/cdrom/pool
[…]
5.0M total

Но не волнуйтесь. Если вы находитесь в зоне с ограниченным подключением к Интернету и все, что вам нужно для работы, - это официальные DVD-диски с настольным компьютером и сервером, вам не обойтись без помощи.И нет, вам не нужно начинать с настольной установки и продвигаться в обратном направлении, удаляя то, что вам не нужно, с рабочего стола и устанавливая то, что вам , нужно, с сервера. Этот метод работает, но требует довольно много времени. Было бы лучше начать с установки сервера и добавлять только те вещи с DVD рабочего стола, которые, как вы знаете, вам нужны. Для этого вам нужно будет перестроить репозиторий программного обеспечения из сжатой файловой системы на настольном DVD. Однако после этого у вас будет полностью автономный репозиторий программного обеспечения, содержащий большинство вещей, присутствующих в Desktop Edition ОС, и вы сможете установить все, что вам может понадобиться из Desktop Edition:

# Comment out everything in sources.list
# For an offline system, it's not needed
$ cp -v /etc/apt/sources.list ./sources.list.orig
$ awk '{print "# " $0}' sources.list.orig >sources.list

# Get dpkg-repack from the Server DVD
# Might as well get build-essential too, while you're at it
$ sudo mount /dev/cdrom /media/cdrom  # ubuntu-14.04.4-server-amd64.iso
$ sudo cp -v sources.list /etc/apt/
$ sudo apt-cdrom -d /media/cdrom -m -a --no-auto-detect add
$ sudo apt-get update
$ sudo apt-get -y install build-essential dpkg-repack
$ sudo umount /dev/cdrom

# Mount the compressed filesystem from the Desktop DVD
$ sudo mount /dev/cdrom /media/cdrom  # ubuntu-14.04.4-desktop-amd64.iso
$ sudo mkdir /mnt/fs.sfs
$ sudo mount /media/cdrom/casper/filesystem.squashfs /mnt/fs.sfs \
>     -t squashfs -o loop

# Create an offline repository from the Desktop DVD
# NOTE: this will take about 30 minutes to complete
$ cd /var/cache/apt/archives
$ sudo chroot /mnt/fs.sfs dpkg --get-selections | awk '{print $1}' | \
> while IFS="" read -r pkg; do
>   sudo dpkg-repack --root /mnt/fs.sfs "$pkg"
> done
$ cd -

# Create the offline repository from the collection of DEBs and update apt
$ dpkg-scanpackages /var/cache/apt/archives | gzip -9c >Packages.gz
$ sudo mv -v Packages.gz /var/cache/apt/archives/
$ echo "deb file:/var/cache/apt/archives ./" >>sources.list
$ sudo mv -v sources.list* /etc/apt/
$ sudo apt-get update

Как только все это будет сделано, будьте готовы:

$ suto apt-get install xorg

(Замените xorg на ubuntu-desktop или что-нибудь еще, что вам может понадобиться.)

Если вы когда-нибудь получите доступ в Интернет позже и хотите обновить какие-либо пакеты, просто восстановите /etc/apt/sources.list.orig и запустите apt-get update , чтобы вернуть apt в оперативный режим работы.

Обязательное предупреждение «Графический интерфейс на сервере - это почти всегда плохая идея ™».

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

- Страница ServerGUI на вики-странице справки сообщества Ubuntu

Есть несколько законных вариантов использования GUI на сервере, но обычно их немного.Тем не менее, в зависимости от сервера, среды, предполагаемого варианта использования сервера и т. Д., Это обычно создает повышенный риск безопасности (, особенно , если вы устанавливаете устаревшие файлы с DVD, а не используя самые свежие материалы из онлайн-репозиториев), поэтому хорошо знать о негативных последствиях такой конфигурации. Вышеупомянутая ссылка содержит некоторую полезную информацию по теме, и, поскольку более широкое обсуждение выходит за рамки фактического вопроса, я оставлю читателю как задачу проведения надлежащего исследования, так и ответственность за осознанное решение так или иначе.

1
23.05.2018, 19:00
1 ответ

Ваш вопрос мне не совсем ясен, но я думаю, мог бы понять, что вы пытаетесь сделать.

Вот этот цикл, который вы используете:

for x in /home/tb/temp/*.pdf
do
    d="${x:4:4}-${x:8:2}-${x:10:2}"
    mkdir -p "$d"
    mv -- "$x" "$d/"
done

Примеры имен файлов, которые вы дали, были:

  1. Dispatch Fax_20180521121901.pdf
  2. Dispatch_20180521124202.pdf

Одна проблема, которая бросается мне в глаза, заключается в том, что ваше выражение подстановки параметра -(d="${x:4:4}-${x:8:2}-${x:10:2}"), похоже, не дает правильных результатов, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d="${x:4:4}-${x:8:2}-${x:10:2}"
> echo ${d}
atch- F-ax

> x='Dispatch_20180521124202.pdf'
> d="${x:4:4}-${x:8:2}-${x:10:2}"
> echo ${d}
atch-_2-01

Вместо этого вы можете попробовать использовать grep, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> echo ${d}
20180521

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> echo ${d}
20180521

Или, если вы хотите добавить дефисы, вы можете использовать следующую команду на основеsed--замену:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
> echo ${d}
2018-05-21

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
> echo ${d}
2018-05-21

Предполагая, что это желаемый результат (, т. е. что вам нужны подкаталоги формы %Y-%m-%d), мы могли бы заменить ваше выражение подстановки параметра -подстановкой команды -на основе grep-. Вместо этого мы получили бы следующий модифицированный цикл:

for filename in /home/tb/temp/*.pdf; do
    datestring=$(echo "${filename}" | sed -E 's/^[^0-9]*([0-9]{4})([0-9]{2})([0-9]{2}).*$/\1-\2-\3/')
    mkdir -p "${datestring}"
    mv -i -- "${filename}" "${datestring}/"
done

Это должно создать подкаталоги вида %Y-%m-%dи заполнить их соответствующими файлами.


ОБНОВЛЕНИЕ:Основываясь на вашем комментарии,похоже, что вам нужны вложенные подкаталоги формы %Y/%m/%d. Для этого вам нужно будет извлечь подстроки года, месяца и дня отдельно, например.:

> x='Dispatch Fax_20180521121901.pdf'
> d=$(echo "${x}" | grep -Po '\d{8}')
> year=${d:0:4}
> month=${d:4:2}
> day=${d:6:2}
> echo "${year}/${month}/${day}/"
2018/05/21/

Это приводит нас к следующему циклу:

for filename in /home/tb/temp/*.pdf; do
    datestring=$(echo "${filename}" | grep -Po '\d{8}')
    year=${datestring:0:4}
    month=${datestring:4:2}
    day=${datestring:6:2}
    directory="${year}/${month}/${day}/"
    mkdir -p "${directory}"
    mv -i -- "${filename}" "${directory}"
done
3
28.04.2021, 23:46

Теги

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