合併作業系統以使用相同的應用程式?

合併作業系統以使用相同的應用程式?

我一直在使用 Ubuntu GNOME 20.04 和 Kubuntu 21.04。它們都位於不同的分區中。我必須在兩個作業系統上進行工作,但為此,我必須重新啟動計算機,然後選擇另一個作業系統進行啟動。

所以我想知道是否有任何方法可以共享 Kubuntu 中安裝的也在 Ubuntu 中使用的應用程序,而無需再次在 Ubuntu 中重新安裝相同的軟體,這樣我就不必在作業系統之間切換。

答案1

不,實際上來說。擁有兩個不同版本的獨立作業系統,但隨後設定可以在不同作業系統中使用另一個版本的二進位檔案將1) 在許多情況下是不可能的,因為二進位不相容和/或錯誤或不可用的依賴項或2)從技術上講,設定非常複雜,而且出現意外問題的風險仍然很大。

是的,原則上,您可以掛載其他作業系統的系統分割區,並直接在其他作業系統中執行一些簡單的二進位檔案。然而,大多數二進位檔案要複雜得多,並且依賴指定的系統配置和相依性。當您嘗試從不同的作業系統執行它們時,它們將不會運行。非常精通 Linux 的人仍然可以將其中的一些工作作為一種愛好 - 這是一個需要對每個應用程式單獨重複的練習。

那麼有沒有辦法可以共享 Kubuntu 中安裝的應用程式也可以在 Ubuntu 中使用,而無需在 Ubuntu 中再次重新安裝相同的軟體,這樣我就不必在作業系統之間切換。

正如你在這裡寫的那樣,是的。

維護單一作業系統,並在其上安裝標準 Ubuntu 的 shell Gnome Shell 和 Kubuntu 的 shell KDE Plasma。無論您登入哪個桌面,您安裝的任何應用程式都將可用。

答案2

是的,您可以使用 chroot 同時執行多個 Ubuntu 安裝中的軟體。有一些注意事項:

  • 所有程式都將在單一核心下運行。
  • 預設情況下,主作業系統無法使用 chroot 中的程式。您需要建立包裝腳本來啟動它們。
  • 可能需要進行一些調整才能使事情順利運行。至少,文件所有權/使用者/群組需要協調。下面顯示的內容適用於我的系統。您可能需要進行我無法預見的額外調整。

要設定 chroot,您需要執行以下操作:

  • 啟動進入 Kubuntu 安裝。

  • 安裝schroot

    apt-get install schroot
    

    添加以下內容/etc/schroot/schroot.confUSERNAME更改為您的用戶名:

    [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選項以及chownandchgrp可以在這裡提供幫助。

  • 如果您想要在 chroot 中執行守護程序,請建立以下 init 腳本(/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 應用程式中的連結並使用基本作業系統的預設處理程序打開它們,您將需要進行更多更改。請注意,執行此操作後,如果直接啟動已 chroot 的作業系統,則無法正常運作。

  • 建立一個 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 &
    
  • 將 chroot 的xdg-open命令替換為新的 shell 腳本:

    • 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接受的答案

相關內容