Bash

Slackware(64) 14.2 + chroot + xfce4-session + 音頻 + (NV-)GLX?

  • December 18, 2021

只是為了更容易掛載我的 Slackware 14.2 安裝,我把它放在另一個分區上(它是 32 位 100% 真正的原生)。

我可以像 root 使用者一樣啟動 xfce4-session(但這不是我需要的):

ch“根”

我需要知道是否有人可以幫助我解決以下問題

1 - 將音頻重定向到主機,因為

我沒有來自 chroot 的任何聲音

2 - 可以在 Nvidia 上使用 3D、DRI 嗎?我在Gentoo論壇上看到了一些東西,但我不明白)

英偉達,2D/3D 可能嗎?

3 - 從我的腳本中隱藏一些命令和/或輸出:這些行是:

local being added to access control list

export DISPLAY=localhost:1 2>/dev/null

exit

當我關閉 Xephyr 視窗時,這會在之後出現:

-su: línea 3: $'\E[01mHP': no se encontró la orden

chroot & xephyr

我的腳本“slack32-chroot”內容:

#!/usr/bin/env bash

echo '
Autor ----------------> Inukaze ( Venezuela )
Sitio ----------------> https://goo.gl/ij6WqW
Correo-E -------------> bloginukaze@gmail.com
Licencia -------------> GPL 2
'
#Establecer mediante la variable "$OBJETIVO" 
#La particion con una distribucion a la cual se accedera mediante chroot
export OBJETIVO="/media/Slack32"

#Prevenir que se autoejecuten las funciones que se definiran despues
unset montar
unset desmontar
unset MensajeBase

#Establecer y definir funciones :
function MensajeBase()
{
echo -e "\nLa forma correcta de utilizar este guion es :\n$0 «montar» , «montar_xephyr» ó «desmontar», Por ejemplo : \n"
echo -e "$0 montar"
echo -e "$0 montar_xephyr"
echo -e "$0 desmontar\n"
}

function montar(){
#Preparar acceso para programas de entorno grafico :
export DISPLAY=:0.0 2>/dev/null
xhost + local 2>/dev/null

#Montar todo de una vez para una distro de 32 Bits (En este caso Slackware32 14.2) : 
mount --rbind /proc                         "$OBJETIVO/proc"                        ; \
mount --make-rslave                         "$OBJETIVO/proc"                        ; \
mount --rbind /sys                              "$OBJETIVO/sys"                         ; \
mount --make-rslave                         "$OBJETIVO/sys"                         ; \
mount --rbind /dev                          "$OBJETIVO/dev"                         ; \
mount --make-rslave                         "$OBJETIVO/dev"                         ; \
mount --rbind /run                              "$OBJETIVO/run"                         ; \
mount --make-rslave                         "$OBJETIVO/run"                         ; \
mount --rbind /tmp                          "$OBJETIVO/tmp"                         ; \
mount --make-rslave                         "$OBJETIVO/tmp"                         ; \
mount --bind /etc/fstab                     "$OBJETIVO/etc/fstab"                   ; \
mount --bind /etc/hostname          "$OBJETIVO/etc/hostname"        ; \
mount --bind /etc/hosts                     "$OBJETIVO/etc/hosts"               ; \
mount --bind /etc/resolv.conf           "$OBJETIVO/etc/resolv.conf"     ; \

cat << EOF | linux32 chroot "$OBJETIVO"
export DISPLAY=localhost:1 2>/dev/null
EOF

linux32 chroot                                  "$OBJETIVO" /bin/bash -l                ; \
umount -l                                           "$OBJETIVO"                                 ; \
mount -a 2>/dev/null
}


function xephyr(){
#Copiar archivo de autorizacion X.Org :
rm -f "$OBJETIVO/home/inukaze/.Xauthority"
rm -f "$OBJETIVO/root/.Xauthority"
cp -f "/home/inukaze/.Xauthority" "$OBJETIVO/root/.Xauthority"
cp -f "/home/inukaze/.Xauthority" "$OBJETIVO/home/inukaze/.Xauthority"
chown inukaze:users "$OBJETIVO/home/inukaze/.Xauthority"

if [ ! -f "$OBJETIVO/etc/X11/Xwrapper.config" ] ; then
# Prevenir el error « /usr/libexec/Xorg.wrap: Only console users are allowed to run the X server »
echo '# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# This file was generated by the post-installation script of the x11-common
# package using values from the debconf database.
#
# See the Xwrapper.config(5) manual page for more information.
#
# This file is automatically updated on upgrades of the x11-common package
# *only* if it has not been modified since the last upgrade of that package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
#   dpkg-reconfigure x11-common
#allowed_users=console
allowed_users=anybody' | tee "$OBJETIVO/etc/X11/Xwrapper.config"
fi

#Preparar acceso para programas de entorno grafico :
export DISPLAY=:0.0 2>/dev/null
xhost + local 2>/dev/null

#Montar todo de una vez para una distro de 32 Bits (En este caso Slackware32 14.2) : 
mount --rbind /proc                         "$OBJETIVO/proc"                        ; \
mount --make-rslave                         "$OBJETIVO/proc"                        ; \
mount --rbind /sys                              "$OBJETIVO/sys"                         ; \
mount --make-rslave                         "$OBJETIVO/sys"                         ; \
mount --rbind /dev                          "$OBJETIVO/dev"                         ; \
mount --make-rslave                         "$OBJETIVO/dev"                         ; \
mount --rbind /run                              "$OBJETIVO/run"                         ; \
mount --make-rslave                         "$OBJETIVO/run"                         ; \
mount --rbind /tmp                          "$OBJETIVO/tmp"                         ; \
mount --make-rslave                         "$OBJETIVO/tmp"                         ; \
mount --bind /etc/fstab                     "$OBJETIVO/etc/fstab"                   ; \
mount --bind /etc/hostname          "$OBJETIVO/etc/hostname"        ; \
mount --bind /etc/hosts                     "$OBJETIVO/etc/hosts"               ; \
mount --bind /etc/resolv.conf           "$OBJETIVO/etc/resolv.conf"     ; \

cat << EOF | linux32 chroot "$OBJETIVO"
export DISPLAY=localhost:1 2>/dev/null
EOF

linux32 chroot                                  "$OBJETIVO" /bin/bash -l        <<"EOT"
#Primero Detectar Particiones, Crear Directorios dentro de /media y finalmente montarlas
#Nombre De Particion :
#   NPD1="1SlackIni"    # Esta es la particion /boot de la particion que estoy usando en chroot
   NPD2="72GB"
   NPD3="Compartido"
   NPD4="2SlackIni"
#   NPD5="Slack64"  #Esta es la particion Anfrition, asi que realmente no la necesito para esto.
#   NPD6="Slack32"  #Esta es la que estoy usando en chroot
   NPD7="2Compartir"
#Parte de la Particion
#   PPD1=$(blkid | grep "$NPD1" | cut -c01-09)
   PPD2=$(blkid | grep "$NPD2" | cut -c01-09)
   PPD3=$(blkid | grep "$NPD3" | cut -c01-09)
   PPD4=$(blkid | grep "$NPD4" | cut -c01-09)
#   PPD5=$(blkid | grep "$NPD5" | cut -c01-09)
#   PPD6=$(blkid | grep "$NPD6" | cut -c01-09)
   PPD7=$(blkid | grep "$NPD7" | cut -c01-09)
$(mkdir -p /media/"$NPD2" ; mount "$PPD2" /media/"$NPD2" )
$(mkdir -p /media/"$NPD3" ; mount "$PPD3" /media/"$NPD3" )
$(mkdir -p /media/"$NPD4" ; mount "$PPD4" /media/"$NPD4" )
$(mkdir -p /media/"$NPD7" ; mount "$PPD7" /media/"$NPD7" )
$(su - inukaze)
$(Xephyr -ac -screen 1070x888 -br -reset -terminate :1.0 2>/dev/null &)
$(export DISPLAY=:1.0)
$(DISPLAY=:1 /usr/bin/xfce4-session -- :1 2>/dev/null)
EOT

umount -l                                           "$OBJETIVO"                                 ; \
mount -a 2>/dev/null
}

function desmontar(){
# Desmontar
umount -l           "$OBJETIVO"                         ; \
mount -a 2>/dev/null
}


#Este guión necesita ser ejecutado como SuperUsuario
#o en su defecto con permisos administrativos suficientes
#Para montar / desmontar particiones.
if [ "$(whoami)" != root ]; then

   echo
   echo
   echo 'Por favor ejecuta este guion como SuperUsuario (root)'
   echo
   echo 'Utilize este guión bajo su Propio Riesgro'
   echo 'El Autor , o sea yo , no me hago responsable'
   echo 'de las consecuencias imprevistas que puedan'
   echo 'acontecer en tu sistema operativo'
   echo
else
# Proceder en caso de tener los permisos suficientes para montar/desmontar particiones :

#Si el usuario no pasa ningun parametro indicar como se usa este guion
           if [ -z "$1" ]; then
                   MensajeBase
           fi

#Guion : Aqui se ha definido como se utilizara este guion correctamente para montar o desmontar la particion Objetivo
#Entrada : Cualquier palabra pasada por el parametro $1 sera convertida en minusculas
Entrada=$(echo "$1" | tr -s  '[:upper:]'  '[:lower:]')

           if [ "$Entrada" == "montar" ]; then
                   montar
           fi

           if [ "$Entrada" == "xephyr" ]; then
                   xephyr
           fi

           if [ "$Entrada" == "desmontar" ]; then
                   desmontar
           fi

#Finalizar la condicion globar de requerir usar el SuperUsuario o en su defectos persmisos administrativos
#Para poder (des)montar particiones :
fi

#Finalizar este guion sin problemas :
exit 0 2>/dev/null

這是來自LinuxQuestions.org的副本

  1. 因為我不在 chroot 中使用 pulseaudio,所以音頻解決方案修復只是刪除文件/etc/asound.conf
rm -rf /usr/asound.conf
  1. 訪問 3D/DRI 需要兩件事,第一是編輯文件/etc/X11/xorg.conf並添加
Section "Files"
#    ModulePath "/usr/lib64/nvidia-304.137/xorg"
    ModulePath "/usr/lib/xorg/modules"
EndSection

您必須首先檢查 X.Org 的“模組和擴展”文件的路徑,在添加一些擴展和+iglx啟用對 glx 的訪問的參數之後,xephyr 命令現在是:

$(Xephyr -ac -screen 1070x888 -br -reset -terminate -render :1.0 \
+extension Composite \
+extension DAMAGE \
+extension DOUBLE-BUFFER \
+extension DPMS \
+extension GLX \
+extension NV-GLX \
+extension RANDR \
+extension RENDER \
+extension X-Resource \
+extension XFIXES \
+xinerama \
+iglx \
2>/dev/null &)

這就是我從實際安裝的 Slackware64 14.2 到在另一個帶有音頻和 3D/DRI 的分區上實際安裝的 Slackware32 14.2 訪問所需的全部內容。

我的整個腳本現在是:

#!/usr/bin/env bash

echo '
Autor ----------------> Inukaze ( Venezuela )
Sitio ----------------> https://goo.gl/ij6WqW
Correo-E -------------> bloginukaze@gmail.com
Licencia -------------> GPL 2
'
#Establecer mediante la variable "$OBJETIVO" 
#La particion con una distribucion a la cual se accedera mediante chroot
export OBJETIVO="/media/Slack32"

#Prevenir que se autoejecuten las funciones que se definiran despues
unset montar
unset desmontar
unset MensajeBase

#Establecer y definir funciones :
function MensajeBase()
{
echo -e "\nLa forma correcta de utilizar este guion es :\n$0 «montar» , «montar_xephyr» ó «desmontar», Por ejemplo : \n"
echo -e "$0 montar"
echo -e "$0 montar_xephyr"
echo -e "$0 desmontar\n"
}

function montar(){
#Preparar acceso para programas de entorno grafico :
export DISPLAY=:0.0 2>/dev/null
xhost + local 2>/dev/null

#Montar todo de una vez para una distro de 32 Bits (En este caso Slackware32 14.2) : 
mount --rbind /proc                         "$OBJETIVO/proc"                        ; \
mount --make-rslave                         "$OBJETIVO/proc"                        ; \
mount --rbind /sys                              "$OBJETIVO/sys"                         ; \
mount --make-rslave                         "$OBJETIVO/sys"                         ; \
mount --rbind /dev                          "$OBJETIVO/dev"                         ; \
mount --make-rslave                         "$OBJETIVO/dev"                         ; \
mount --rbind /run                              "$OBJETIVO/run"                         ; \
mount --make-rslave                         "$OBJETIVO/run"                         ; \
mount --rbind /tmp                          "$OBJETIVO/tmp"                         ; \
mount --make-rslave                         "$OBJETIVO/tmp"                         ; \
mount --bind /etc/fstab                     "$OBJETIVO/etc/fstab"                   ; \
mount --bind /etc/hostname          "$OBJETIVO/etc/hostname"        ; \
mount --bind /etc/hosts                     "$OBJETIVO/etc/hosts"               ; \
mount --bind /etc/resolv.conf           "$OBJETIVO/etc/resolv.conf"     ; \

cat << EOF | linux32 chroot "$OBJETIVO"
export DISPLAY=localhost:1 2>/dev/null
EOF

linux32 chroot                                  "$OBJETIVO" /bin/bash -l                ; \
umount -l                                           "$OBJETIVO"                                 ; \
mount -a 2>/dev/null
}


function xephyr(){
#Copiar archivo de autorizacion X.Org :
rm -f "$OBJETIVO/home/inukaze/.Xauthority"
rm -f "$OBJETIVO/root/.Xauthority"
cp -f "/home/inukaze/.Xauthority" "$OBJETIVO/root/.Xauthority"
cp -f "/home/inukaze/.Xauthority" "$OBJETIVO/home/inukaze/.Xauthority"

#Audio :
#rm -rf                                                 "$OBJETIVO/etc/asound.conf"
#cp -f "/etc/asound.state"                      "$OBJETIVO/etc/asound.state"

#Video :
#cp -f /usr/lib/libGL.so.304.137-nvidia "$OBJETIVO/usr/lib/libGL.so.304.137-nvidia"
#cp -f /usr/lib/libGL.so.304.137-nvidia "$OBJETIVO/usr/lib/libGL.so.304.137"
#cp -f /usr/lib/libGL.so.1.2.0                  "$OBJETIVO/usr/lib/libGL.so.1.2.0"
#cp -f /usr/lib/libGL.so                                "$OBJETIVO/usr/lib/libGL.so"
#cp -f /usr/lib/libGL.la-nvidia                 "$OBJETIVO/usr/lib/libGL.la-nvidia"

chown inukaze:users "$OBJETIVO/home/inukaze/.Xauthority"

if [ ! -f "$OBJETIVO/etc/X11/Xwrapper.config" ] ; then
# Prevenir el error « /usr/libexec/Xorg.wrap: Only console users are allowed to run the X server »
echo '# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# This file was generated by the post-installation script of the x11-common
# package using values from the debconf database.
#
# See the Xwrapper.config(5) manual page for more information.
#
# This file is automatically updated on upgrades of the x11-common package
# *only* if it has not been modified since the last upgrade of that package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
#   dpkg-reconfigure x11-common
#allowed_users=console
allowed_users=anybody' | tee "$OBJETIVO/etc/X11/Xwrapper.config"
fi

#Preparar acceso para programas de entorno grafico :
$(export DISPLAY=:1.0)
$(xhost + local 2>/dev/null)

#Montar todo de una vez para una distro de 32 Bits (En este caso Slackware32 14.2) : 
mount --rbind /proc                                                 "$OBJETIVO/proc"                                                    ; \
mount --make-rslave                                                 "$OBJETIVO/proc"                                                    ; \
mount --rbind /sys                                                      "$OBJETIVO/sys"                                                     ; \
mount --make-rslave                                                 "$OBJETIVO/sys"                                                     ; \
mount --rbind /dev                                                  "$OBJETIVO/dev"                                                     ; \
mount --make-rslave                                                 "$OBJETIVO/dev"                                                     ; \
mount --rbind /run                                                      "$OBJETIVO/run"                                                     ; \
mount --make-rslave                                                 "$OBJETIVO/run"                                                     ; \
mount --rbind /tmp                                                  "$OBJETIVO/tmp"                                                     ; \
mount --make-rslave                                                 "$OBJETIVO/tmp"                                                     ; \
mount --rbind /var/run/dbus                                     "$OBJETIVO/var/run/dbus"                                        ; \
mount --make-rslave                                                 "$OBJETIVO/var/run/dbus"                                        ; \
mount --rbind /var/lib/dbus                                     "$OBJETIVO/var/lib/dbus"                                        ; \
mount --make-rslave                                                 "$OBJETIVO/var/lib/dbus"                                        ; \
mount --rbind /etc/X11                                              "$OBJETIVO/etc/X11"                                             ; \
mount --make-rslave                                                 "$OBJETIVO/etc/X11"                                             ; \
mount --rbind /usr/X11R6                                        "$OBJETIVO/usr/X11R6"                                           ; \
mount --make-rslave                                                 "$OBJETIVO/usr/X11R6"                                           ; \
mount --rbind /lib/modules                                      "$OBJETIVO/lib/modules"                                     ; \
mount --make-rslave                                                 "$OBJETIVO/lib/modules"                                     ; \
mount --bind /etc/fstab                                             "$OBJETIVO/etc/fstab"                                               ; \
mount --bind /etc/hostname                                  "$OBJETIVO/etc/hostname"                                    ; \
mount --bind /etc/hosts                                             "$OBJETIVO/etc/hosts"                                           ; \
mount --bind /etc/resolv.conf                                   "$OBJETIVO/etc/resolv.conf"                                 ; \
#NV_GLX#mount --bind /usr/lib/libnvidia-glcore.so.304.137   "$OBJETIVO/usr/lib/libnvidia-glcore.so.304.137" ; \
#NV_GLX#mount --bind /usr/lib/tls/libnvidia-tls.so.304.137  "$OBJETIVO/usr/lib/tls/libnvidia-tls.so.304.137"    ; \
#NV_GLX#mount --bind /usr/lib/libGLEW.so.1.13.0                 "$OBJETIVO/usr/lib/libGLEW.so.1.13.0"                   ; \
#NV_GLX#mount --bind /usr/lib/libGLEW.so.1.13                       "$OBJETIVO/usr/lib/libGLEW.so.1.13"                     ; \
#NV_GLX#mount --bind /usr/lib/libGLEW.so                                "$OBJETIVO/usr/lib/libGLEW.so"                              ; \
#NV_GLX#mount --bind /usr/lib/libGLU.so.1.3.1                       "$OBJETIVO/usr/lib/libGLU.so.1.3.1"                     ; \
#NV_GLX#mount --bind /usr/lib/libGLU.so.1                               "$OBJETIVO/usr/lib/libGLU.so.1"                             ; \
#NV_GLX#mount --bind /usr/lib/libGLU.so                                 "$OBJETIVO/usr/lib/libGLU.so"                               ; \
#NV_GLX#mount --bind /usr/lib/libGLU.la                                 "$OBJETIVO/usr/lib/libGLU.la"                                   ; \
#NV_GLX#mount --bind /usr/lib/libGL.so.304.137-nvidia           "$OBJETIVO/usr/lib/libGL.so.304.137-nvidia"     ; \
#NV_GLX#mount --bind /usr/lib/libGL.so.1.2.0                            "$OBJETIVO/usr/lib/libGL.so.1.2.0"                          ; \
#NV_GLX#mount --bind /usr/lib/libGL.so.1                                "$OBJETIVO/usr/lib/libGL.so.1"                              ; \
#NV_GLX#mount --bind /usr/lib/libGL.so                                  "$OBJETIVO/usr/lib/libGL.so"                                    ; \
#NV_GLX#mount --bind /usr/lib/libGL.la-nvidia                       "$OBJETIVO/usr/lib/libGL.la-nvidia"                     ; \
#NV_GLX#mount --bind /usr/lib/libGL.la                                  "$OBJETIVO/usr/lib/libGL.la"                                    ; \
#AUDIO#mount --bind /usr/lib/libasound.so.2.0.0                 "$OBJETIVO/usr/lib/libasound.so.2.0.0"                  ; \
#AUDIO#mount --bind /usr/lib/libasound.so.2                     "$OBJETIVO/usr/lib/libasound.so.2"                      ; \
#AUDIO#mount --bind /usr/lib/libasound.so                           "$OBJETIVO/usr/lib/libasound.so"                            ; \
#AUDIO#mount --bind /usr/lib/libasound.la                           "$OBJETIVO/usr/lib/libasound.la"                            ; \


cat << EOF | linux32 chroot "$OBJETIVO"
$(export DISPLAY=:1.0 2>/dev/null) 
EOF

linux32 chroot                                  "$OBJETIVO" /bin/bash -l        <<"EOT"
#Primero Detectar Particiones, Crear Directorios dentro de /media y finalmente montarlas
#Nombre De Particion :
#   NPD1="1SlackIni"    # Esta es la particion /boot de la particion que estoy usando en chroot
   NPD2="72GB"
   NPD3="Compartido"
   NPD4="2SlackIni"
#   NPD5="Slack64"  #Esta es la particion Anfrition, asi que realmente no la necesito para esto.
#   NPD6="Slack32"  #Esta es la que estoy usando en chroot
   NPD7="2Compartir"
#Parte de la Particion
#   PPD1=$(blkid | grep "$NPD1" | cut -c01-09)
   PPD2=$(blkid | grep "$NPD2" | cut -c01-09)
   PPD3=$(blkid | grep "$NPD3" | cut -c01-09)
   PPD4=$(blkid | grep "$NPD4" | cut -c01-09)
#   PPD5=$(blkid | grep "$NPD5" | cut -c01-09)
#   PPD6=$(blkid | grep "$NPD6" | cut -c01-09)
   PPD7=$(blkid | grep "$NPD7" | cut -c01-09)
$(mkdir -p /media/"$NPD2" ; mount "$PPD2" /media/"$NPD2" )
$(mkdir -p /media/"$NPD3" ; mount "$PPD3" /media/"$NPD3" )
$(mkdir -p /media/"$NPD4" ; mount "$PPD4" /media/"$NPD4" )
$(mkdir -p /media/"$NPD7" ; mount "$PPD7" /media/"$NPD7" )
$(su - inukaze)

$(Xephyr -ac -screen 1070x888 -br -reset -terminate -render :1.0 \
+extension Composite \
+extension DAMAGE \
+extension DOUBLE-BUFFER \
+extension DPMS \
+extension GLX \
+extension NV-GLX \
+extension RANDR \
+extension RENDER \
+extension X-Resource \
+extension XFIXES \
+xinerama \
+iglx \
2>/dev/null &)

$(export DISPLAY=:1.0)
$(DISPLAY=:1 /usr/bin/xfce4-session -- :1 2>/dev/null) 

##DESACTIVADO##$(DISPLAY=:1 /usr/bin/startx -- :1 2>/dev/null)  #Inicia en otra tty con (NV-)GLX a pantalla completa
EOT

umount -l                                           "$OBJETIVO"                                 ; \
mount -a 2>/dev/null
}

function desmontar(){

# Desmontar

umount -l           "$OBJETIVO"                         ; \
mount -a 2>/dev/null

}


#Este guión necesita ser ejecutado como SuperUsuario
#o en su defecto con permisos administrativos suficientes
#Para montar / desmontar particiones.

if [ "$(whoami)" != root ]; then

   echo
   echo
   echo 'Por favor ejecuta este guion como SuperUsuario (root)'
   echo
   echo 'Utilice este guión bajo su Propio Riesgo'
   echo 'El Autor , o sea yo , no me hago responsable'
   echo 'de las consecuencias imprevistas que puedan'
   echo 'acontecer en tu sistema operativo'
   echo
else

# Proceder en caso de tener los permisos suficientes para montar/desmontar particiones :

#Si el usuario no pasa ningún parámetro indicar como se usa este guion

           if [ -z "$1" ]; then
                   MensajeBase
           fi

#Guion : Aquí se ha definido como se utilizara este guion correctamente para montar o desmontar la partición Objetivo
#Entrada : Cualquier palabra pasada por el parámetro $1 sera convertida en minúsculas

Entrada=$(echo "$1" | tr -s  '[:upper:]'  '[:lower:]')

           if [ "$Entrada" == "montar" ]; then
                   montar
           fi

           if [ "$Entrada" == "xephyr" ]; then
                   xephyr
           fi

           if [ "$Entrada" == "desmontar" ]; then
                   desmontar
           fi

#Finalizar la condición global de requerir usar el SuperUsuario o en su defectos permisos administrativos
#Para poder (des)montar particiones :

fi

#Finalizar este guion sin problemas :

$(exit 0)

備註:

一個。#AUDIO & #NV-GLX 部分是真的不需要它

灣。因為用它進行測試,我嘗試直接在 chroot 上編譯 nvidia-legacy304 驅動程序,結果非常糟糕,現在我的 Slackware64 14.2 上沒有 3D/DRI,因為我無法編譯“nvidia-legacy304-kernel”我只是收到以下錯誤:

Creating directory NVIDIA-Linux-x86_64-304.137
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 


304.137................................................................................................................................................................
If you are using a Linux 2.4 kernel, please make sure
you either have configured kernel sources matching your
kernel or the correct set of kernel headers installed
on your system.

If you are using a Linux 2.6 kernel, please make sure
you have configured kernel sources matching your kernel
installed on your system. If you specified a separate
output directory using either the "KBUILD_OUTPUT" or
the "O" KBUILD parameter, make sure to specify this
directory with the SYSOUT environment variable or with
the equivalent nvidia-installer command line option.

Depending on where and how the kernel sources (or the
kernel headers) were installed, you may need to specify
their location with the SYSSRC environment variable or
the equivalent nvidia-installer command line option.

*** Unable to determine the target kernel version. ***

makefile:53: fallo en las instrucciones para el objetivo 'select_makefile'

引用自:https://unix.stackexchange.com/questions/681512