창 관리자 없이 물리적으로 연결된 모니터에 GUI LXC 컨테이너를 표시하려면 어떻게 해야 합니까?

창 관리자 없이 물리적으로 연결된 모니터에 GUI LXC 컨테이너를 표시하려면 어떻게 해야 합니까?

특정 모니터에서 전체 화면을 실행하는 LXC OS 컨테이너가 있는 설정을 원합니다. 중간 단계로 호스트 X를 통해 표시할 컨테이너의 X 애플리케이션을 가져오려고 합니다.

나는 이것을 가이드로 사용해 왔습니다:https://blog.simos.info/running-x11-software-in-lxd-containers/

내 프로그램은 다음과 같습니다

X11 컨테이너를 실행하기 위한 구성 파일을 만듭니다.

cat<<EOF>x11.profile
config:
  environment.DISPLAY: :0
  environment.PULSE_SERVER: unix:/home/ubuntu/pulse-native
  nvidia.driver.capabilities: all
  nvidia.runtime: "true"
  user.user-data: |
    #cloud-config
    runcmd:
      - 'sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf'
    packages:
      - x11-apps
      - mesa-utils
      - pulseaudio
description: GUI LXD profile
devices:
  PASocket1:
    bind: container
    connect: unix:/run/user/1000/pulse/native
    listen: unix:/home/ubuntu/pulse-native
    security.gid: "1000"
    security.uid: "1000"
    uid: "1000"
    gid: "1000"
    mode: "0777"
    type: proxy
  X0:
    bind: container
    connect: unix:@/tmp/.X11-unix/X0
    listen: unix:@/tmp/.X11-unix/X0
    security.gid: "1000"
    security.uid: "1000"
    type: proxy
  mygpu:
    type: gpu
name: x11
used_by: []
EOF


lxc profile create x11
cat x11.profile | lxc profile edit x11

그런 다음 컨테이너를 만들 수 있습니다(X를 시작해야 하지만 처음에는 이것이 필요하다는 것을 몰랐습니다).

$ lxc launch ubuntu:18.04 --profile default --profile x11 mycontainer
Creating mycontainer
Starting mycontainer
Error: Failed to run: /snap/lxd/current/bin/lxd forkstart mycontainer /var/snap/lxd/common/lxd/containers /var/snap/lxd/common/lxd/logs/mycontainer/lxc.conf: 
Try `lxc info --show-log local:mycontainer` for more info


$ sudo startx &
[1] 12745
$ 
X.Org X Server 1.20.11
X Protocol Version 11, Revision 0
Build Operating System: linux Ubuntu
Current Operating System: Linux virtland 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Tue Oct 26 18:07:44 UTC 2021 x86_64
Kernel command line: BOOT_IMAGE=/BOOT/ubuntu_2aec3h@/vmlinuz-5.11.0-40-generic root=ZFS=rpool/ROOT/ubuntu_2aec3h ro init_on_alloc=0 amd_iommu=on vfio_pci.ids=10de:1b81,10de:10f0,1002:67df,1002:aaf0,1b21:1242 crashkernel=512M-:192M
Build Date: 06 July 2021  10:17:51AM
xorg-server 2:1.20.11-1ubuntu1~20.04.2 (For technical support please see http://www.ubuntu.com/support) 
Current version of pixman: 0.38.4
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
        (++) from command line, (!!) notice, (II) informational,
        (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Wed Nov 17 18:29:01 2021
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
$ lxc launch ubuntu:18.04 --profile default --profile x11 mycontainer
Creating mycontainer
Starting mycontainer

컨테이너 내에서 xeyes를 실행하면 모니터에 연결할 수 없습니다.

이전 설치에서 이것을 사용했습니다(호스트 데스크톱에 xeyes가 표시되지만 데스크톱이 없으면 xeyes 대신 기본 xterm 창이 팝업됩니다). 그러나 어떤 이유로 지금은 전혀 작동하지 않습니다. 내가 뭘 다르게 하고 있는지 이해하지 못하는 것 같아요.

~$ lxc exec mycontainer -- sudo --user ubuntu --login
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@mycontainer:~$ xeyes
No protocol specified
Error: Can't open display: :0

그래서 우선, 저는 xeyes다시 콘솔 데스크탑에 있을 수 있기를 원합니다.

결국 나는 창 관리자 없이 베어 X로 실행할 수 있고, 결국에는 해당 프로세스를 사용하여 전체 DE를 실행할 수 있기를 원합니다.

시스템 정보: 운영 체제: Ubuntu Server 20.04 LXD 버전: 4.20 LXC 버전: 4.20

답변1

나는 마침내 여기서 답을 찾았습니다."루트": "지정된 프로토콜 없음"에서 GUI 응용 프로그램을 실행할 수 없는 이유는 무엇입니까?

방금 실행했습니다.

sudo startx & #I'm pretty sure it isn't ideal to startx as root
sudo -i
xhost si:localuser:MYUSERID
exit

그런 다음 컨테이너로 이동하여 실행하면 xeyes창 관리자가 아닌 디스플레이에 나타납니다. 내가 한 다른 어떤 일이 영향을 미쳤는지 잘 모르겠습니다. 이번 라운드에서는 다음 드라이버를 설치했습니다.

sudo apt install --no-install-recommends nvidia-driver-470-server nvidia-utils-470-server nvidia-prime xfonts-base libc-dev libc6-dev fakeroot build-essential gnupg2 dbus-user-session mesa-vulkan-drivers

나는 이 모든 것이 필요한지 의심스럽습니다. 그러나 사실과 미신을 경험적으로 분리할 시간이나 인내심이 없습니다. 그것이 효과가 있다면 그것으로 충분합니다.

관련 정보