2 |
|
|
3 |
export LC_ALL=C |
export LC_ALL=C |
4 |
|
|
5 |
HWSETUP_DIR=/etc/sysconfig/hwsetup |
HWSETUP_DIR=/etc/conf.d/hwsetup |
6 |
HWINFO="/usr/sbin/hwinfo" |
HWINFO="/usr/sbin/hwinfo" |
7 |
|
|
8 |
|
UNSUPPORTED_GFXCARD_DRIVERS="" |
9 |
|
UNSUPPORTED_NETCARD_DRIVERS="" |
10 |
|
if [ -f ${HWSETUP_DIR}/unsupported-gfxcard-drivers ] |
11 |
|
then |
12 |
|
UNSUPPORTED_GFXCARD_DRIVERS="$(< ${HWSETUP_DIR}/unsupported-gfxcard-drivers)" |
13 |
|
fi |
14 |
|
if [ -f ${HWSETUP_DIR}/unsupported-netcard-drivers ] |
15 |
|
then |
16 |
|
UNSUPPORTED_NETCARD_DRIVERS="$(< ${HWSETUP_DIR}/unsupported-netcard-drivers)" |
17 |
|
fi |
18 |
|
|
19 |
clearconfig() |
clearconfig() |
20 |
{ |
{ |
21 |
local file="$1" |
local file="$1" |
30 |
echo "${data}" >> ${HWSETUP_DIR}/${file} |
echo "${data}" >> ${HWSETUP_DIR}/${file} |
31 |
} |
} |
32 |
|
|
33 |
|
# check_unsupported_netcard_drivers UNSUPPORTED_ARRAY DRIVER |
34 |
|
check_unsupported_drivers() |
35 |
|
{ |
36 |
|
local unsupported="$1" |
37 |
|
local driver="$2" |
38 |
|
local i |
39 |
|
|
40 |
|
# filter unsupported devices |
41 |
|
for i in ${unsupported} |
42 |
|
do |
43 |
|
[[ ${i} = ${driver} ]] && return 1 |
44 |
|
done |
45 |
|
return 0 |
46 |
|
} |
47 |
|
|
48 |
|
get_gfxcard_sysfsid_from_specific_hwid() |
49 |
|
{ |
50 |
|
local SEARCH_ID="$1" |
51 |
|
local hwid |
52 |
|
local sysfsid |
53 |
|
local counter |
54 |
|
|
55 |
|
declare -i counter=0 |
56 |
|
|
57 |
|
echo "${GFXCARD_INFO}" | while read line |
58 |
|
do |
59 |
|
# get hwinfo device id, its always the first line |
60 |
|
if [[ ${counter} = 0 ]] |
61 |
|
then |
62 |
|
# hwids begins all with ^ID:, sub informations have an empty space |
63 |
|
hwid=$(echo "${line}" | grep '^[0-9].*' | sed 's:\(^[0-9]*\)\:\ .*:\1:') |
64 |
|
fi |
65 |
|
|
66 |
|
# search for device id |
67 |
|
if [[ ${SEARCH_ID} = ${hwid} ]] |
68 |
|
then |
69 |
|
case "${line}" in |
70 |
|
*'SysFS ID:'*) |
71 |
|
# subst the id |
72 |
|
sysfsid="${line#*:}" |
73 |
|
# trim spaces |
74 |
|
sysfsid="${sysfsid// }" |
75 |
|
echo "${sysfsid}" |
76 |
|
;; |
77 |
|
esac |
78 |
|
fi |
79 |
|
|
80 |
|
# next hardware item |
81 |
|
if [[ -z ${line} ]] |
82 |
|
then |
83 |
|
counter=0 |
84 |
|
else |
85 |
|
((counter++)) |
86 |
|
fi |
87 |
|
done |
88 |
|
} |
89 |
|
|
90 |
|
get_primary_display_hwid() |
91 |
|
{ |
92 |
|
local hwid |
93 |
|
hwid="$(echo "${GFXCARD_INFO}" | grep 'Primary display adapter:' | sed 's:.*\:\ \#\([0-9]*\):\1:')" |
94 |
|
echo "${hwid}" |
95 |
|
} |
96 |
|
|
97 |
|
|
98 |
|
# disable probeonly, load all modules by default |
99 |
|
probeonly=0 |
100 |
|
|
101 |
|
# check getops |
102 |
|
for i in $* |
103 |
|
do |
104 |
|
case $1 in |
105 |
|
# ignoring -p,-v,-a,-s |
106 |
|
-p|-v|-a|-s) shift;; |
107 |
|
# only support dry-run |
108 |
|
-n) shift; probeonly=1 ;; |
109 |
|
esac |
110 |
|
shift |
111 |
|
done |
112 |
|
|
113 |
echo -n "Autoconfiguring devices... " 1>&2 |
echo -n "Autoconfiguring devices... " 1>&2 |
114 |
|
|
115 |
GFXCARD_INFO="$(${HWINFO} --gfxcard)" |
GFXCARD_INFO="$(${HWINFO} --gfxcard)" |
116 |
|
# check for a primary device and rerun hwinfo for this device only |
117 |
|
primary_display_hwid="$(get_primary_display_hwid)" |
118 |
|
if [[ -n ${primary_display_hwid} ]] |
119 |
|
then |
120 |
|
GFXCARD_INFO="$(${HWINFO} --gfxcard --only $(get_gfxcard_sysfsid_from_specific_hwid ${primary_display_hwid}))" |
121 |
|
fi |
122 |
NETCARD_INFO="$(${HWINFO} --netcard)" |
NETCARD_INFO="$(${HWINFO} --netcard)" |
123 |
MOUSE_INFO="$(${HWINFO} --mouse)" |
MOUSE_INFO="$(${HWINFO} --mouse)" |
124 |
|
|
162 |
then |
then |
163 |
GFXCARD_MODULE[${i}]="vesa" |
GFXCARD_MODULE[${i}]="vesa" |
164 |
fi |
fi |
165 |
|
|
166 |
|
# exclude unsupported drivers |
167 |
|
check_unsupported_drivers "${UNSUPPORTED_GFXCARD_DRIVERS}" "${NETCARD_MODULE[${i}]}" || continue |
168 |
|
|
169 |
addconfig xserver "XSERVER=\"${GFXCARD_XSERVER}\"" |
addconfig xserver "XSERVER=\"${GFXCARD_XSERVER}\"" |
170 |
addconfig xserver "XMODULE=\"${GFXCARD_MODULE[${i}]}\"" |
addconfig xserver "XMODULE=\"${GFXCARD_MODULE[${i}]}\"" |
171 |
addconfig xserver "XDESC=\"${GFXCARD_DESC[${i}]}\"" |
addconfig xserver "XDESC=\"${GFXCARD_DESC[${i}]}\"" |
174 |
addconfig knoppix "XSERVER=\"${GFXCARD_XSERVER}\"" |
addconfig knoppix "XSERVER=\"${GFXCARD_XSERVER}\"" |
175 |
addconfig knoppix "XMODULE=\"${GFXCARD_MODULE[${i}]}\"" |
addconfig knoppix "XMODULE=\"${GFXCARD_MODULE[${i}]}\"" |
176 |
addconfig knoppix "XDESC=\"${GFXCARD_DESC[${i}]}\"" |
addconfig knoppix "XDESC=\"${GFXCARD_DESC[${i}]}\"" |
177 |
|
|
178 |
|
# load some needed modules for xorg-servers without udev or hal support, which the driver would normally autoload |
179 |
|
case "${GFXCARD_MODULE[${i}]}" in |
180 |
|
intel|i810) modprobe -q intel-agp ;; |
181 |
|
nv) modprobe -q nvidia-agp ;; |
182 |
|
sis) modprobe -q sis-agp ;; |
183 |
|
ati|radeon|r128|mach64) modprobe -q ati-agp ;; |
184 |
|
via|openchrome|unichrome) modprobe -q via-agp ;; |
185 |
|
esac |
186 |
done |
done |
187 |
|
|
188 |
for ((i=0; i<NETCARD_COUNT; i++)) |
for ((i=0; i<NETCARD_COUNT; i++)) |
192 |
then |
then |
193 |
NETCARD_MODULE[${i}]="${NETCARD_MODULE_FB[${i}]}" |
NETCARD_MODULE[${i}]="${NETCARD_MODULE_FB[${i}]}" |
194 |
fi |
fi |
195 |
|
|
196 |
|
# exclude this driver if its still empty, the provided kernel does not support this hardware |
197 |
|
if [[ -z ${NETCARD_MODULE[${i}]} ]] |
198 |
|
then |
199 |
|
continue |
200 |
|
fi |
201 |
|
|
202 |
|
# exclude unsupported drivers |
203 |
|
check_unsupported_drivers "${UNSUPPORTED_NETCARD_DRIVERS}" "${NETCARD_MODULE[${i}]}" || continue |
204 |
|
|
205 |
addconfig netcard "FULLNAME=\"${NETCARD_DESC[${i}]}\"" |
addconfig netcard "FULLNAME=\"${NETCARD_DESC[${i}]}\"" |
206 |
addconfig netcard "DRIVER=\"${NETCARD_MODULE[${i}]}\"" |
addconfig netcard "DRIVER=\"${NETCARD_MODULE[${i}]}\"" |
207 |
|
|
208 |
# add them to knoppix too |
# add them to knoppix too |
209 |
addconfig knoppix "NETCARD_FULLNAME=\"${NETCARD_DESC[${i}]}\"" |
addconfig knoppix "NETCARD_FULLNAME=\"${NETCARD_DESC[${i}]}\"" |
210 |
addconfig knoppix "NETCARD_DRIVER=\"${NETCARD_MODULE[${i}]}\"" |
addconfig knoppix "NETCARD_DRIVER=\"${NETCARD_MODULE[${i}]}\"" |
211 |
|
|
212 |
|
# load the netcard modules |
213 |
|
if [[ ${probeonly} = 0 ]] |
214 |
|
then |
215 |
|
modprobe -q "${NETCARD_MODULE[${i}]}" |
216 |
|
fi |
217 |
done |
done |
218 |
|
|
219 |
for ((i=0; i<MOUSE_COUNT; i++)) |
for ((i=0; i<MOUSE_COUNT; i++)) |