合并操作系统以使用相同的应用程序?

合并操作系统以使用相同的应用程序?

我一直在使用 Ubuntu GNOME 20.04 和 Kubuntu 21.04。它们都在单独的分区中。我必须在两个操作系统上进行操作,但为此,我必须重新启动计算机,然后选择要启动的另一个操作系统。

所以我想知道是否有任何方法可以共享在 Kubuntu 中安装的可在 Ubuntu 中使用的应用程序,而无需在 Ubuntu 中重新安装相同的软件,这样我就不必在操作系统之间切换。

答案1

实际上,不是。拥有两个不同版本的独立操作系统,但要设置成可以在不同的操作系统中使用另一个版本的二进制文件,1) 在许多情况下是不可能的,因为二进制文件不兼容和/或依赖项错误或不可用;2) 从技术上讲设置起来非常复杂,而且仍然有更大的意外问题风险。

是的,原则上,您可以安装其他操作系统的系统分区,并直接在其他操作系统中运行一些简单的二进制文件。但是,大多数二进制文件要复杂得多,并且依赖于指定的系统配置和依赖项。当您尝试从其他操作系统执行它们时,它们将无法运行。精通 Linux 的人仍然可以将其中一些工作作为业余爱好 - 这是一项需要为每个应用程序单独重复的练习。

那么有没有什么方法可以共享在 Kubuntu 中安装的应用程序并在 Ubuntu 中使用,而无需在 Ubuntu 中重新安装相同的软件,这样我就不必在操作系统之间切换。

正如您在这里写的,是的。

保持单一操作系统,并在其上安装 Gnome Shell(标准 Ubuntu 的 shell)和 KDE Plasma(Kubuntu 的 shell)。这样,无论你登录哪个桌面,你安装的任何应用程序都可以使用。

答案2

是的,您可以使用 chroot 同时运行来自多个 Ubuntu 安装的软件。但有几点需要注意:

  • 所有程序将在单个内核下运行。
  • 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
    
  • 您可能需要在登录时应用其他调整。如果需要/适当,请创建以下 shell 脚本并将其设置为在登录时运行,即在桌面环境(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 即可。您需要在 chroot 的 和 中更新适当的 UID 和 GID /etc/passwd/etc/group/etc/shadow下旧的 UID 和 GID)。完成后,更新 chroot 文件系统中的数字 ID;命令find-exec选项以及chownchgrp可以在这里提供帮助。

  • 如果您有一个要在 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
    
  • 添加 shell 脚本以启动 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 的操作系统,则一切将无法正常工作。

  • 创建一个 shell 脚本/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 &
    
  • xdg-open使用新的 shell 脚本替换 chroot 的命令:

    • 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 视频编辑……)。因此,如果您为 ubuntu 创建不同的 /home 分区,然后在 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接受的答案

相关内容