buruh pelabuhan - bagaimana menjalankan x desktop dalam sebuah wadah?

10

Saya mencoba mengatur mesin Linux saya untuk menjalankan beberapa OS tamu, salah satunya adalah Windows VM, dan yang lain sebuah wadah Linux. Tujuannya di sini adalah untuk mencegah saya mengacaukan sistem host, sambil bebas mengoperasikan sistem operasi dasar dan bermain dengan perangkat keras host. Akhirnya, di atas menjalankan desktop saya di dalam wadah, saya berharap untuk menjalankan simulasi percepatan grafis, dll. Karena Docker memiliki versi yang mirip git seperti wadah bawaan, sepertinya ide yang bagus untuk menggunakannya. Mungkin libvirt akan sama baiknya dengan LXC, tetapi mode istimewa docker membuatnya lebih mudah untuk tidak harus mengkonfigurasi perangkat ke wadah.

Saya telah melakukan sedikit riset dan menghasilkan beberapa jawaban, tetapi saya kesulitan menyatukannya.

Latar belakang di LXC

Menjalankan X dari LXC membantu saya melihat bagaimana saya bisa mengkonfigurasi sebuah wadah dengan (yaitu):

lxc.cgroup.devices.allow = c 226:0 rwm

dan menggunakan

mknod -m 666 dri/card0 c 226 0

di dalam wadah untuk terhubung ke perangkat host.

Buruh pelabuhan

Dari cuda - Menggunakan GPU dari wadah buruh pelabuhan , saya melihat bahwa saya bisa mendapatkan pengaturan yang sama untuk bekerja di Docker dengan backend LXC.

Tampak bagi saya bahwa jika wadah buruh pelabuhan dijalankan dalam mode istimewa, maka ia dapat mengakses GPU secara normal tanpa konfigurasi tambahan ini. Jadi, saya menjalankan sistem basis, menginstal driver grafis, xorg-server, xorg-xinit, dan manajer jendela untuk mengujinya.

Percobaan pertama

# startx
Cannot run from a console (or some message like that)

Oke, saya pikir saya sudah tty2.

# tty
/dev/console

Bukan itu yang saya harapkan.

# chvt 2
# tty
/dev/tty2

Ya, sepertinya itu berhasil. Ayo coba # startxlagi. Itu memulai manajer jendela, dengan kursor di tengah. Tidak ada respons mouse. Tidak ada respons keyboard. Mari kita coba ganti tty dengan Ctrl-Alt+F3. Tidak ada respon. Yah, sepertinya saya harus reboot dingin.

Percobaan kedua

# tty
/dev/console
# chvt 2
# tty
/dev/console

Apa? Saya tidak bisa mengubahnya sekarang?

Lanjutan

Setelah mencoba lain kali, saya mengubahnya tty, dan startx membekukan komputer lagi.

Apa sekarang?

Jadi, saya sekarang di jalan buntu. Saya benar-benar ingin dapat menggunakan wadah - Docker lebih disukai, LXC dengan libvirt juga dapat diterima - untuk berjalan sebagai sistem operasi harian saya sambil menjaga OS lean host.

Apakah lebih baik menggunakan Docker dengan mode istimewa di sini, atau menggunakan backend LXC eksplisit dan mencoba opsi yang tercantum di atas?

Saya sudah berencana menggunakan libvirt (mungkin di bawah gelandangan-libvirt) untuk mengelola Windows vm saya, jadi apakah akan sama bagi saya untuk menggunakan libvirt atau vagrant-LXC dalam kasus ini?

Sunting: membaca LXC vs Docker , saya merasa bahwa karena wadah Docker dan Docker dimaksudkan untuk lingkungan aplikasi tunggal, mungkin sebaiknya menggunakan LXC daripada Docker untuk dijalankan sebagai sistem operasi harian saya. Pikiran?

Sunting: Saya telah menemukan bahwa, seperti buruh pelabuhan, ada perintah lxc-device yang memungkinkan saya untuk mem-bypass cgroup dan langkah mknod. Padahal sebelumnya saya bisa mendapatkan x untuk memulai dan membekukan sistem saya, itu hanya kesalahan sekarang. Mungkin akhirnya saya bisa memikirkannya, karena sepertinya tidak ada orang di luar sana.

Pembaruan: Mouse saya berfungsi. Pada tamu tersebut, saya menginstal xf86-input-mouse dan xf86-input-keyboard. Di tuan rumah, saya menjalankan yang berikut:

# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2

Bekerja!

Paul
sumber
Saya cukup yakin bahwa LXC adalah apa yang perlu saya gunakan, dan bukan Docker. Sayangnya, ini adalah waktu yang cukup sulit untuk menemukan dokumentasi terbaru tentang mengikat tty tertentu ke wadah sehingga saya dapat menjalankan X. Baik host dan guest saya menggunakan systemd, sedangkan semua dokumentasi di sekitar terkait / etc / inittab terkait. Apakah ada yang tahu cara bekerja dengan wadah LXC dengan benar untuk membuat mereka "memiliki" tty pada host?
Paul
Ketika saya memberikan LXC tty sendiri, dan kartu video menetapkan untuk itu, saya mencoba startxdengan exec twm, tapi semuanya membeku dari perspektif saya. Tidak ada respons terhadap keyboard atau mouse.
Paul
unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11 tampaknya memiliki jawaban yang relevan. Saya pikir saya perlu meneruskan rantai / dev / input. Saya akan mencobanya.
Paul
Kedengarannya seperti unix.stackexchange.com/questions/18003/… punya jawabannya, menurut irclog.perlgeek.de/crimsonfu/2015-03-23#i_10327389
Philip Durbin
Ya, saya pikir keyboard saya sudah beres. Tapi sekarang tidak berfungsi lagi.
Paul

Jawaban:

1

Pertanyaan ini memiliki jawaban yang saya butuhkan. Tentu saja, saya menggunakan lxc-devicebukannya definisi cgroup dalam file konfigurasi. Namun, dalam kasus saya, saya hanya mendapatkan keyboard untuk bekerja di X jika saya memulainya pada tty yang berbeda.

Paul
sumber