Доброе время суток!
Я сделал свой Linux-livecd но у меня глюки с автоматическим определением графических карточек.
Сначала я написал такой скриптик, который вызывается всегда при запуске startx или kdm демона, и фаил /etc/X11/xorg.conf не найден:# Detect video card
HOME=/tmp Xorg -configure >/dev/null 2>&1
NEW_XORG_CONFIG_FILE="/etc/X11/xorg.conf"
# Create config directory if not exists
if ! [ -e /etc/X11 ]; then
install -m755 -d /etc/X11
fi
# Get detected parameters from temporary file
VIDEO_DRIVER=`cat /tmp/xorg.conf.new | awk '/^Section "Device"/,/EndSection/ {print}' | tail -5 | head -1 | awk '{print $2}'`
HSYNC=`cat /tmp/xorg.conf.new | awk '/^Section "Monitor"/,/EndSection/ {print}' | grep 'HorizSync' | awk -F'#' '{print $2}'`
VREFRESH=`cat /tmp/xorg.conf.new | awk '/^Section "Monitor"/,/EndSection/ {print}' | grep 'VertRefresh' | awk -F'#' '{print $2}'`
# Set default parameters if video not detected
if [ "${HSYNC}" = "" ]; then
HSYNC="HorizSync 31.5 - 81.1"
fi
if [ "${VREFRESH}" = "" ]; then
VREFRESH="VertRefresh 56-75"
fi
# If detected vmware driver - change it to vesa (it work better)
if [ "${VIDEO_DRIVER}" = "\"vmware\"" ]; then
VIDEO_DRIVER="\"vesa\""
fi
# Create config file
cat > ${NEW_XORG_CONFIG_FILE} << EOF
Section "ServerLayout"
Identifier "DeniX"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "Files"
RgbPath "/usr/share/X11/rgb"
ModulePath "/usr/lib/X11/modules"
FontPath "/usr/lib/X11/fonts/misc/"
FontPath "/usr/lib/X11/fonts/TTF/"
FontPath "/usr/lib/X11/fonts/OTF"
FontPath "/usr/lib/X11/fonts/Type1/"
FontPath "/usr/lib/X11/fonts/CID/"
FontPath "/usr/lib/X11/fonts/100dpi/"
FontPath "/usr/lib/X11/fonts/75dpi/"
EndSection
Section "Module"
Load "extmod"
Load "glx"
Load "dri"
Load "dbe"
Load "GLcore"
#Load "v4l"
Load "record"
Load "xtrap"
Load "type1"
Load "freetype"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbModel" "pc105"
Option "XkbLayout" "us,ru,il"
Option "XkbVariant" ",phonetic,"
Option "XkbOptions" "grp:lwin_toggle,grp_led:scroll"
Option "Autorepeat" "250 30"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5"
Option "Buttons" "5"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
${HSYNC}
${VREFRESH}
Option "DPMS" "true"
#DisplaySize 400 300
#Option "StandbyTime" "10"
#Option "SuspendTime" "20"
#Option "Offtime" "30"
EndSection
Section "Device"
Identifier "Card0"
Driver ${VIDEO_DRIVER}
EndSection
Section "Extensions"
Option "Composite" "0"
Option "RENDER" "Enable"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 1
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
EOF
# Remove temporary config file
rm -rf /tmp/xorg.conf.new
Работает на ура, НО не на всех железяках.
Например если в компе карточка с чипсетом nvidia, после выполнения скрипта мусор на экране и система виснет.
Если с чипсетом brookdale, черный экран, и нифига невидно. Система не виснет. если повторно попытаться запустить - все работает.
В wmware этот скрипт ваще отказывается выполняться грит мол screens not found или что-то в таком роде.
После кучи бессонных ночей я понял что ошибок в скрипте нет и если его выполнить отдельно (в ручную) перезапустить комп, то иксы поднимаются без проблем с конфигом, который мой скрипт создал.
Косяк в самом xogr который у меня версии 7.1 (собирал сам из исходников)
Что получается: если выполнить Xorg -configure а потом startx все пучком, а если создать такой скрипт:
#! /bin/sh
Xorg -configure
startx
то иногда работает, а иногда - черный экран (в лучшем случае, в худшем - виснет)
Вобщем я решил отказаться от вышепредставленного скрипта и решить эту проблему по другой схеме.
Не запускать Xorg -configure вообще
Создать шаблон под xorg.conf
С помощью lspci узнать данные о граф. адаптере
Используя эти данные sedом заменить драйвер в файле конфигурации.
И наконец вопрос:
Существует ли база данных с графическими адаптерами и модулями которую я мог бы использовать при данной схеме только для xorg сервера? (Ну что-то типа pci.ids из пакета pciutils)
Или может ваще существуют более простые решения данной задачи?
Заранее благодарен!