Bash
Slackware(64) 14.2 + chroot + xfce4-session + 音頻 + (NV-)GLX?
只是為了更容易掛載我的 Slackware 14.2 安裝,我把它放在另一個分區上(它是 32 位 100% 真正的原生)。
我可以像 root 使用者一樣啟動 xfce4-session(但這不是我需要的):
我需要知道是否有人可以幫助我解決以下問題
1 - 將音頻重定向到主機,因為
2 - 可以在 Nvidia 上使用 3D、DRI 嗎?我在Gentoo論壇上看到了一些東西,但我不明白)
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
我的腳本“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
- 因為我不在 chroot 中使用 pulseaudio,所以音頻解決方案修復只是刪除文件
/etc/asound.conf
rm -rf /usr/asound.conf
- 訪問 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'