私はUbuntu GNOME 20.04とKubuntu 21.04を使用しています。両方とも別々のパーティションにあります。両方のOSで作業を行う必要がありますが、そのためにはコンピューターを再起動してから、起動する他のOSを選択する必要があります。
そこで、Ubuntu でも使用されている Kubuntu にインストールされたアプリケーションを、Ubuntu に同じソフトウェアを再度インストールせずに共有し、オペレーティング システムを切り替える必要がない方法があるかどうかを知りたいのです。
答え1
いいえ、実際はそうではありません。異なるバージョンの 2 つのオペレーティング システムがあり、別のバージョンのバイナリを別のオペレーティング システムで使用できるように設定することは、1) バイナリの非互換性や依存関係が間違っているか利用できないなどの理由で、多くの場合不可能になります。または、2) 設定が技術的に非常に複雑になり、予期しない問題が発生するリスクがさらに高くなります。
はい、原理的には、他のオペレーティング システムのシステム パーティションをマウントし、いくつかの単純なバイナリを他のオペレーティング システムで直接実行できます。ただし、バイナリの大部分ははるかに複雑で、特定のシステム構成と依存関係に依存します。別のオペレーティング システムから実行しようとしても実行されません。Linux に非常に精通している人なら、趣味としてこれの一部を実行できる可能性があります。これは、すべてのアプリケーションごとに個別に繰り返す必要がある作業です。
では、Kubuntu にインストールされたアプリケーションを Ubuntu でも共有し、同じソフトウェアを Ubuntu に再度インストールせずに、OS を切り替える必要がないようにする方法はありますか。
ここに書いた通り、そうです。
単一のオペレーティング システムを維持し、標準の Ubuntu のシェルである Gnome Shell と、Kubuntu のシェルである KDE Plasma の両方をそのオペレーティング システムにインストールします。インストールしたアプリケーションは、どのデスクトップにログインしていても利用できるようになります。
答え2
はい、chroot を使用して複数の Ubuntu インストールから同時にソフトウェアを実行できます。ただし、いくつか注意点があります。
- すべてのプログラムは単一のカーネルの下で実行されます。
- chroot 内のプログラムは、デフォルトではメイン OS では使用できません。それらを起動するには、ラッパー スクリプトを作成する必要があります。
- スムーズに動作させるには、いくつかの調整が必要になる場合があります。少なくとも、ファイルの所有権/ユーザー/グループを一致させる必要があります。以下に示す内容は、私のシステムでは機能します。予想できない追加の調整が必要になる可能性があります。
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
(下の 2 行目)。次に、システム ディレクトリのバインド マウントと、使用している非標準マウントを追加します。特別なマウント オプションが必要な場合は、それも追加します。例:/.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)
2 つのインストール間でユーザーとグループを一致させます。ユーザー (およびそのグループ) が 2 つのインストールで同じ UID と GID を持つようにするだけで、おそらく問題は解決します。chroot の 、および で適切な UID と GID を更新する必要があります
/etc/passwd
(/etc/group
古い/etc/shadow
UID と GID をメモしておきます)。それが完了したら、chroot ファイルシステムの数値 ID を更新します。find
コマンドの-exec
オプションと がchown
ここchgrp
で役立ちます。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
通常のユーザーとして実行したい 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 ...
コマンドラインからコマンドを手動で実行します。
上記のすべてをシステムに合わせて調整する必要があります。たとえば、2 つのホーム ディレクトリの内容を、両方のインストールでマウントされた 1 つのディレクトリにマージする必要があります。バインド マウントを行う前 (または再起動する前) にこの操作を行ってください。マウント ポイントの下にある既存のファイルは、バインド マウントを行うと表示されなくなります (ディスク上には存在しますが、アクセスできなくなります)。
chroot 内でソフトウェアをインストールまたは更新する必要がある場合は、 などを使用して、通常どおりにschroot -p -c gnome -u root
実行しますapt
。
追加の並行 Ubuntu インストールを行うことができます。 を使用してdebootstrap
新しいディレクトリに初期インストールを実行し、上記のように追加します。
chroot されたアプリケーション内のリンクをクリックして、ベース OS のデフォルト ハンドラーを使用して開くことができるようにするには、さらにいくつかの変更を加える必要があります。これを行った後、chroot された OS を直接起動すると、正しく動作しないことに注意してください。
シェル スクリプトを作成し
/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
多くのアプリは、アプリが生成するデータ (Minecraft の世界、画像、kdenlive のビデオ編集など) を保存するために /home ディレクトリを使用します。そのため、Ubuntu の /home に別のパーティションを作成し、インストール時に再フォーマットせずに同じユーザー名/パスワードを入力せずに、同じパーティションを Kubuntu で使用すると、2 つのバリアント間でアプリ設定が同じになります。この方法でアプリを共有することは困難ですが、少なくとも設定は共有されるはずです。
ソース:https://unix.stackexchange.com/questions/442495/different-linux-distros-sharing-applications
実用的なヒント:https://unix.stackexchange.com/questions/6344/異なるlinuxディストリビューションが同じホームフォルダーを共有している受け入れられた回答