Я использовал Ubuntu GNOME 20.04 и Kubuntu 21.04. Оба они находятся в отдельных разделах. Мне нужно выполнить работу на обеих ОС, но для этого мне нужно перезагрузить компьютер, а затем выбрать другую ОС для загрузки.
Поэтому я хочу узнать, есть ли способ поделиться приложениями, установленными в Kubuntu, которые также используются в Ubuntu, без повторной переустановки того же программного обеспечения в Ubuntu, и чтобы мне не приходилось переключаться между операционными системами.
решение1
Нет, практически. Иметь две отдельные операционные системы разных версий, но затем настроить так, чтобы можно было использовать двоичные файлы из другой версии в другой операционной системе, 1) во многих случаях будет невозможно из-за двоичной несовместимости и/или неправильных или недоступных зависимостей или 2) будет технически очень сложно настроить, и при этом еще и со значительно большим риском непредвиденных проблем.
Да, в принципе, вы можете смонтировать системный раздел другой операционной системы и запустить некоторые простые двоичные файлы непосредственно в другой операционной системе. Однако большинство двоичных файлов гораздо сложнее и зависят от определенных системных конфигураций и зависимостей. Они не будут работать, если вы попытаетесь выполнить их из другой операционной системы. Кто-то очень опытный в Linux все еще может заставить что-то из этого работать в качестве хобби — это упражнение, которое нужно будет повторять для каждого приложения по отдельности.
Есть ли способ сделать так, чтобы приложения, установленные в Kubuntu, также использовались в Ubuntu, без повторной переустановки того же программного обеспечения в Ubuntu, и чтобы мне не приходилось переключаться между ОС?
Как вы здесь написали, да.
Поддерживайте одну операционную систему и установите на ней Gnome Shell, оболочку стандартной Ubuntu, и KDE Plasma, оболочку Kubuntu. Любое приложение, которое вы установите, будет доступно на любом рабочем столе, на котором вы находитесь.
решение2
Да, вы можете запускать программное обеспечение из нескольких установок Ubuntu одновременно, используя chroot. Есть несколько оговорок:
- Все программы будут работать под управлением одного ядра.
- Программы в chroot не будут доступны по умолчанию для основной ОС. Вам нужно будет создать скрипты-обертки для их запуска.
- Возможно, потребуется внести ряд изменений, чтобы все работало гладко. Как минимум, необходимо гармонизировать владельцев файлов/пользователей/группы. То, что показано ниже, работает в моей системе. Вероятно, вам придется внести дополнительные изменения, которые я не могу предвидеть.
Чтобы настроить chroot, вам необходимо сделать следующее:
Загрузите установочный файл Kubuntu.
Установить
schroot
:apt-get install schroot
Добавьте следующее,
/etc/schroot/schroot.conf
чтобыUSERNAME
изменить свое имя пользователя:[gnome] description=Ubuntu 20.04 directory=/chroot/gnome users=USERNAME groups=root root-groups=USERNAME
Добавьте корневой каталог chroot
/etc/fstab
(это вторая строка ниже). Затем добавьте привязки монтирования для системных каталогов и любые нестандартные монтирования, которые вы используете. Если вам нужны какие-либо специальные параметры монтирования, добавьте их. Например:/.media /media none defaults,bind,noauto 0 0 LABEL=gnome /chroot/gnome ext4 defaults,auto,errors=remount-ro 0 0 /proc /chroot/gnome/proc none defaults,rbind,noauto 0 1 /dev /chroot/gnome/dev none defaults,rbind,noauto 0 1 /sys /chroot/gnome/sys none defaults,rbind,noauto 0 1 /var/run/dbus /chroot/gnome/run/dbus none defaults,rbind,noauto 0 1 /var/lock /chroot/gnome/run/lock none defaults,rbind,noauto 0 1 /var/tmp /chroot/gnome/var/tmp none defaults,rbind,noauto 0 1 /tmp /chroot/gnome/tmp none defaults,rbind,noauto 0 1 /home /chroot/gnome/home none defaults,rbind,noauto 0 1 /media /chroot/gnome/media none defaults,rbind,noauto 0 1
Создать каталоги:
mkdirhier /.media /chroot/gnome chmod 755 /.media /chroot /chroot/gnome chown root.root /.media /chroot /chroot/gnome
Добавьте следующее к
/etc/rc.local
:# Make mounts shared mount /.media || true mount /media || true /bin/mount --make-rshared /.media || true # If you have any static mounts under /media, add mount commands for # them here and set them to noauto in /etc/fstab # Mount system directories mount /chroot/gnome/proc || true mount /chroot/gnome/dev || true mount /chroot/gnome/sys || true mount /chroot/gnome/run/dbus || true mount /chroot/gnome/run/lock || true mount /chroot/gnome/var/tmp || true mount /chroot/gnome/tmp || true mount /chroot/gnome/home || true mount /chroot/gnome/media || true # Additional tweaks # (These might not be needed on your system) # Start udevd under gnome # Audio on Chrome won't work without this ( schroot -c gnome -p -u root /etc/init.d/udev start ) || true # Fix pulseaudio killall pulseaudio || true
Вам может потребоваться применить дополнительные настройки во время входа в систему. Если необходимо/уместно, создайте следующий скрипт оболочки и настройте его на запуск при входе в систему, т. е. при запуске среды рабочего стола (KDE или Gnome):
#!/bin/sh # Fix Pulse Audio while pidof pulseaudio ; do killall pulseaudio sleep 1 done schroot -p -c gnome start-pulseaudio-x11 # Uncomment this if you're running KDE4 in the chroot #schroot -p -c KDE4_chroot kded4 & # (additional tweaks may be needed)
Согласуйте пользователей и группы между двумя установками. Вероятно, вы можете обойтись просто тем, что ваш пользователь (и его группа) имеют одинаковые UID и GID на двух установках. Вам нужно будет обновить соответствующие UID и GID в chroot-окружении (
/etc/passwd
запишите старые UID и GID). После этого обновите числовые идентификаторы в файловой системе chroot; здесь может помочь опция команды вместе с и ./etc/group
/etc/shadow
find
-exec
chown
chgrp
Если у вас есть демон, который вы хотите запустить в chroot, создайте следующий сценарий инициализации (
/etc/init.d/DAEMON_NAME
измените DAEMON_NAME соответствующим образом) и сделайте его исполняемым:#!/bin/sh set -e schroot -p -c gnome -u root /etc/init.d/DAEMON_NAME $@ exit 0
Затем добавьте следующее в конец
/etc/rc.local
:/etc/init.d/DAEMON_NAME restart
Добавьте скрипты оболочки для запуска любых программ в chroot, которые вы хотите запустить как обычный пользователь. Не забудьте сделать их исполняемыми. При желании вы можете добавить значок на рабочем столе для запуска скрипта-обертки. Например:
/usr/local/bin/chrome_gnome
:#!/bin/sh mkdir $HOME/.chrome_gnome || true schroot -p -c gnome -- google-chrome --user-data-dir=$HOME/.chrome_gnome "$@"
Перезагрузите систему, и все должно работать. Чтобы запустить команду в chroot, используйте оболочку, которую вы настроили на предыдущем шаге, или просто вручную запустите команду
schroot ...
из командной строки.
Вам нужно будет настроить все вышеперечисленное в соответствии с вашей системой. Например, вы, вероятно, захотите объединить содержимое двух домашних каталогов в один каталог, смонтированный в обеих установках. Сделайте это до выполнения любых монтирований привязки (или перезагрузки), поскольку существующие файлы в точке монтирования не будут видны после выполнения монтирования привязки (они все еще будут там на диске, но не будут доступны).
Если вам необходимо установить или обновить программное обеспечение в chroot, просто используйте , schroot -p -c gnome -u root
а затем запустите apt
и т. д. как обычно.
Можно сделать дополнительные параллельные установки Ubuntu. Используйте debootstrap
для выполнения начальной установки в новый каталог, а затем добавьте его, как показано выше.
Если вы хотите иметь возможность нажимать на ссылки в chrooted приложении и открывать их с помощью обработчика по умолчанию базовой ОС, вам нужно будет сделать еще несколько изменений. Обратите внимание, что после этого все будет работать некорректно, если вы напрямую загрузите chrooted ОС.
Создайте скрипт оболочки
/usr/local/bin/xdg-open-relay-receive
и сделайте его исполняемым:#!/bin/sh mkfifo -m 666 /tmp/xdg-open-relay tail -f "/tmp/xdg-open-relay" | while read line do xdg-open "$line" done
Возможно, вы захотите отредактировать приведенный выше файл, чтобы ужесточить разрешения для
/tmp/xdg-open-relay
.Добавьте следующее в конец скрипта, который вы создали для запуска при входе в систему:
killall xdg-open-relay-receive nohup /usr/local/bin/xdg-open-relay-receive &
Замените команду chroot
xdg-open
новым скриптом оболочки:mv /chroot/gnome/usr/bin/xdg-open /chroot/gnome/usr/bin/xdg-open.DISABLED
Запишите следующее
/chroot/gnome/usr/bin/xdg-open
и сделайте его исполняемым:#!/bin/sh echo "$@" > /tmp/xdg-open-relay
решение3
Многие приложения используют каталог /home для хранения данных, которые генерирует приложение (миры Minecraft, изображения, видеомонтажи kdenlive...). Поэтому, если вы создаете другой раздел для /home для Ubuntu, а затем используете этот же раздел в Kubuntu без переформатирования и ввода того же имени пользователя/пароля во время установки, это должно привести к тому, что настройки вашего приложения будут одинаковыми для двух вариантов. Трудно делиться приложениями, используя этот метод, но, по крайней мере, ваши настройки должны быть общими.
Источник:https://unix.stackexchange.com/questions/442495/different-linux-distros-sharing-applications
Советы по практическому применению:https://unix.stackexchange.com/questions/6344/different-linux-distros-sharing-the-same-home-folderпринятый ответ