slitaz-tools annotate tinyutils/tazx @ rev 924

tazx: autoselect_driver(): use busybox lspci.
Also should work for two graphic cards installed at a time from two different vendors.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Nov 15 05:37:54 2014 +0200 (2014-11-15)
parents ccb6cf783ff2
children a37f6f8dda42
rev   line source
pankso@4 1 #!/bin/sh
pankso@4 2 #
pankso@66 3 # Tazx - Ncurses X configuration for SliTaz GNU/Linux using Dialog boxes.
paul@835 4 # This tinyutil is part of slitaz-tools. Tazx can configure Xorg with
pankso@626 5 # several Window Managers. The GTK interface to configure X is in tazbox.
pankso@4 6 #
pascal@821 7 # (c) 2011-2014 SliTaz GNU/Linux - GNU GPL v3.
pankso@209 8 # Authors: Christophe Lincoln <pankso@slitaz.org>
pankso@209 9 # Pascal Bellard <pascal.bellard@slitaz.org>
pankso@4 10 #
pankso@837 11
paul@838 12 # 20140317: most xsession, xinitrc are obsolete, provided system files
pankso@840 13 # are in /etc/skel and WM config files should no longer be copied by
pankso@840 14 # tazx to user home. If some configs are needed by WMs they should
pankso@840 15 # be set by a /usr/bin/wmname-session script I guess. - Pankso
pankso@837 16
al@813 17 . /lib/libtaz.sh
al@813 18 . /etc/slitaz/slitaz.conf
pankso@840 19 . /etc/slitaz/applications.conf
pankso@840 20
pankso@840 21 installed="$PKGS_DB/installed"
pankso@840 22
al@813 23 export TEXTDOMAIN='slitaz-tools' #i18n
pascal@916 24 : ${DIALOG=dialog --timeout 60}
pankso@4 25
psychomaniak@918 26 WM_i18n=$(_n 'Window Manager:'| sed s/://)
psychomaniak@918 27 INST_i18n=$(_n 'Install Xorg' | sed 's|Xorg||;s|X.org||;s| ||')
pankso@351 28
pankso@534 29 # Default user for config files in Live mode, id is 1000 since it is
pankso@534 30 # created by /etc/init.d/bootopts.sh.
pankso@626 31 USER=$(cat /etc/passwd | grep 1000 | cut -d ":" -f 1)
pankso@4 32
pankso@628 33 #
pankso@615 34 # Functions
pankso@628 35 #
pankso@615 36
al@813 37 # Save chunk of xorg.conf into specified file
al@813 38 save_chunk() {
al@813 39 sed -e '/Section "'${1#*-}'"/,/EndSection/!d' \
al@813 40 -e "s/EndSection/EndSection\n/" $xorg_template > \
al@813 41 $xorg_config/$1.conf
pankso@615 42 }
pankso@66 43
pankso@871 44 gen_xorg_conf_file() {
pankso@871 45 # Create a xorg.conf if needed.
pankso@871 46 if [ ! -f /etc/X11/xorg.conf ]; then
pankso@871 47 cat > /etc/X11/xorg.conf << EOT
pankso@871 48 # You can put here your own Xorg configurations. This config file is read
pankso@871 49 # before all files in /etc/X11/xorg.conf.d and will NOT be erased by any
pankso@871 50 # updates.
pankso@871 51 EOT
pankso@871 52 fi
pankso@871 53 }
pankso@871 54
pankso@870 55 # Generate or regenerate 40-Keyboard.conf
pankso@870 56 keyboard_conf() {
gokhlayeh@492 57 # Configure the keyboard with the right keymap.
al@813 58 keymap=$(cat /etc/keymap.conf)
pankso@874 59 keyboard_config="/etc/X11/xorg.conf.d/40-Keyboard.conf"
al@779 60 variant=""
al@779 61 # this XkbOption moved from 40-evdev.conf (xorg-xf86-input-evdev)
al@779 62 options="terminate:ctrl_alt_bksp"
pankso@874 63 gettext "Creating:"; echo -n " $keyboard_config"
pankso@874 64 mkdir -p $(dirname $keyboard_config)
pankso@874 65 case "$keymap" in
pankso@260 66 fr_CH-latin1)
pankso@260 67 # Swiss FrenCH
al@779 68 layout="ch"; variant="fr" ;;
pankso@597 69 uk)
paul@617 70 # English UK
al@779 71 layout="gb" ;;
pankso@260 72 ru)
pankso@260 73 # Russian
al@779 74 layout="us,ru"
al@779 75 options="grp:ctrl_shift_toggle, grp_led:scroll, $options" ;;
al@813 76 ua)
al@813 77 # Ukrainian
al@813 78 layout="us,ua,ru"
al@813 79 options="grp:ctrl_shift_toggle, $options" ;;
pankso@303 80 slovene)
pankso@303 81 # Slovenian
al@779 82 layout="si"; options="grp:alt_shift_toggle, $options" ;;
pankso@577 83 us-acentos)
al@779 84 layout="us"; variant="intl" ;;
pankso@260 85 *)
pankso@260 86 # Use clean /etc/keymap.conf value.
gokhlayeh@492 87 keymap=${keymap%-latin1}
gokhlayeh@492 88 keymap=${keymap%-lat2}
gokhlayeh@492 89 keymap=${keymap%-lat6}
al@779 90 layout=${keymap%-abnt2}
pankso@260 91 esac
al@779 92 cat > $keyboard_config << EOC
al@779 93 Section "InputClass"
al@779 94 Identifier "Keyboard Defaults"
al@779 95 MatchIsKeyboard "yes"
al@779 96 Option "XkbLayout" "$layout"
al@779 97 Option "XkbVariant" "$variant"
al@779 98 Option "XkbOptions" "$options"
al@779 99 EndSection
al@779 100 EOC
pankso@874 101 status
pankso@874 102 [ x$variant == x ] && sed -i '/XkbVariant/d' ${keyboard_config}
pankso@870 103 }
pankso@870 104
pankso@870 105 # Populate xorg.conf.d.
pankso@870 106 xorg_conf_d() {
pankso@870 107 # Define the xorg.conf.d (can be /etc/X11/xorg.conf.d or /usr/share/X11/xorg.conf.d)
pankso@870 108 xorg_config=/etc/X11/xorg.conf.d
pankso@870 109
pankso@870 110 # Define the xorg.conf.new place.
pankso@870 111 xorg_template=/root/xorg.conf.new
pankso@870 112
pankso@870 113 # Obtain a default configuration file from Xorg.
pankso@870 114 Xorg -configure :2
pankso@870 115
pankso@870 116 # Backup existing config.
pankso@870 117 tar -cf $xorg_config/../Previous_xorg.conf.d.tar $xorg_config/ &> /dev/null
pankso@870 118
pankso@870 119 # Put the different sections in separate files in the config directory.
pankso@870 120 save_chunk 10-ServerLayout
pankso@870 121 sed -i '/Core/d' $xorg_config/10-ServerLayout.conf
pankso@870 122 save_chunk 20-Files
pankso@870 123 save_chunk 30-Module
pankso@870 124 save_chunk 50-Monitor
pankso@870 125 save_chunk 60-Device
pankso@870 126 save_chunk 70-Screen
pankso@870 127
pankso@870 128 # Remove the template.
pankso@870 129 rm $xorg_template
pankso@870 130
pankso@871 131 # Keyboard & xorg.conf
pankso@870 132 keyboard_conf
pankso@871 133 gen_xorg_conf_file
pankso@260 134 }
pankso@260 135
psychomaniak@912 136 dialog_end() {
psychomaniak@912 137 retval=$?
psychomaniak@912 138 exec 3>&-
psychomaniak@912 139 # Continue or exit.
psychomaniak@912 140 case $retval in
psychomaniak@918 141 0|3) continue ;;
psychomaniak@912 142 1|255) exit 0 ;;
psychomaniak@912 143 esac
psychomaniak@912 144 }
psychomaniak@912 145
paul@549 146 # Install xorg server.
al@813 147 install_xorg() {
pankso@628 148 [ -f "/var/lib/tazpkg/packages.list" ] || tazpkg recharge
pankso@117 149 exec 3>&1
al@813 150 value=$($DIALOG \
psychomaniak@918 151 --clear --colors --scrollbar --default-item "$1" \
al@813 152 --title " $(_n 'Install Xorg') " \
al@813 153 --menu "$(_n 'Tazx helps you to select your X driver.')" 16 70 8 \
psychomaniak@918 154 Auto_select "$(_n 'Auto configuring Xorg...' | sed 's/X//;s/org//;s|...$||;s| |_|')" \
pankso@635 155 $(fgrep xorg-xf86-video /var/lib/tazpkg/packages.list | cut -d- -f4 | \
al@813 156 while read x; do echo $x; _ 'driver'; done) \
al@813 157 "quit" "$(_n 'Quit')" \
al@813 158 2>&1 1>&3)
psychomaniak@912 159 dialog_end
al@813 160
pankso@117 161 # Set selected value.
pankso@117 162 case $value in
pankso@628 163 quit) exit 0 ;;
pankso@117 164 *)
psychomaniak@918 165 [ ! $value = Auto_select ] || autoselect_driver IN_List
psychomaniak@912 166 inst_pkg xorg-server
psychomaniak@912 167 inst_pkg xorg-xf86-video-$value
pankso@628 168 xorg_conf_d ;;
pankso@117 169 esac
pankso@117 170 }
pankso@117 171
psychomaniak@918 172 autoselect_driver() {
al@924 173 DEVICE="$(_ 'driver')"
al@924 174 for VID in $(busybox lspci | grep 'Class 03' | cut -c21-24 | sort -u); do
al@924 175 case $VID in
al@924 176 1022|1002) d=ati ;;
al@924 177 8086) d=intel ;;
al@924 178 10de) d=nouveau ;;
al@924 179 1039) d=sis ;;
al@924 180 15ad) d=vmware ;;
al@924 181 *) $DIALOG --colors --msgbox \
al@924 182 "\Z1 $(_n 'Failed to setup $DEVICE') \Zn (unknown hardware)" 5 68 ;;
al@924 183 esac
psychomaniak@918 184 [ $1 = sh ] || install_xorg $d
al@924 185 done
psychomaniak@918 186 }
psychomaniak@918 187
psychomaniak@912 188 inst_pkg() {
psychomaniak@922 189 pkg="$@" && colorize 3 $(_ 'Installing pkg: $pkg')
psychomaniak@912 190 CMD="sudo tazpkg -gi $@"
psychomaniak@912 191 test $(id -u) = 0 && CMD="tazpkg -gi $@"
psychomaniak@912 192 [ -d "$installed/$@" ] || $CMD
psychomaniak@909 193 }
psychomaniak@909 194
psychomaniak@912 195 apps_dialog() {
psychomaniak@912 196 . ${user_conf}
psychomaniak@912 197 exec 3>&1
psychomaniak@918 198 app=$($DIALOG --clear --colors --backtitle "$msg" \
psychomaniak@918 199 --title "{\Z3 $(_n '${INST_i18n}: ${WM_i18n} + applications') \Zn}" \
psychomaniak@918 200 --inputmenu "" 21 52 18 \
psychomaniak@918 201 $(for a in WINDOW_MANAGER EDITOR BROWSER TERMINAL FILE_MANAGER; do
psychomaniak@918 202 eval n='$'"$a" ; echo "$a $n";
psychomaniak@912 203 done) 2>&1 1>&3)
psychomaniak@912 204 dialog_end
psychomaniak@912 205 case $app in
psychomaniak@918 206 RENAME*)appname=$(echo $app | cut -d " " -f3)
psychomaniak@912 207 app=$(echo $app | cut -d " " -f2) ;;
psychomaniak@912 208 *)
psychomaniak@912 209 app_name_dialog only-installed d a-item ;;
psychomaniak@912 210 esac
psychomaniak@912 211 if [ ! $appname = " " ]; then
psychomaniak@912 212 [ ! $appname = show_ALL ] || app_name_dialog full-list d
psychomaniak@912 213 if [ ! $(busybox which ${appname} 2>/dev/null) ]; then
psychomaniak@912 214 inst_pkg $appname
psychomaniak@918 215 [ -d "$installed/$appname" ] || inst_pkg \
psychomaniak@918 216 $(tazpkg search-pkgname /bin/$appname | grep -Ev '=|:| |/bin/')
psychomaniak@912 217 else
psychomaniak@918 218 sed '/'${app}'/s|=.*$|="'${appname}'"|' -i ${user_conf}
psychomaniak@912 219 fi
psychomaniak@912 220 fi
psychomaniak@918 221 msg=''; apps_dialog
psychomaniak@912 222 }
psychomaniak@912 223
psychomaniak@912 224 app_name_dialog() {
psychomaniak@918 225 sz=28 ; [ $1 = full-list ] || sz=18
psychomaniak@912 226 exec 3>&1
psychomaniak@918 227 appname=$($DIALOG --clear --colors --title "${app}" \
psychomaniak@912 228 --menu "" $sz 50 24 $(gen_applist $app $@) 2>&1 1>&3) \
psychomaniak@912 229 dialog_end
psychomaniak@912 230 }
psychomaniak@912 231
psychomaniak@912 232 gen_applist() {
psychomaniak@912 233 . ${user_conf}
psychomaniak@918 234 FILE_MANAGERS="clex caja emelfm2 mc pathfinder pcmanfm pcmanfm-qt ranger spacefm thunar xfe ytree"
psychomaniak@918 235 BROWSERS="arora chrome cream dillo elinks firefox firefox-official iron links lynx \
psychomaniak@918 236 midori netsurf opera QtWeb qupzilla retawq seamonkey surf tazweb"
psychomaniak@918 237 EDITORS="adie beaver emacs geany jed joe juffed ht le leafpad mcedit mousepad mp-5 \
psychomaniak@912 238 nano qedit SciTE vi vim xedit xfw zile"
psychomaniak@918 239 TERMINALS="aterm evilvte lxterminal mrxvt qterminal sakura stjerm tilda urxvt vte \
psychomaniak@912 240 xterm yeahconsole"
psychomaniak@918 241 WINDOW_MANAGERS="awesome blackbox compiz dwm echinus enlightenment fluxbox icewm jwm \
psychomaniak@918 242 lxde-session lxqt karmen matchbox openbox-session pekwm ratpoison xfwm4"
psychomaniak@912 243
psychomaniak@912 244 eval list='$'"$1"S
psychomaniak@912 245 eval current='$'"$1"
psychomaniak@918 246 for i in $current $(echo ' '$list' ' | sed "s| "$current" | |g") $4 ; do
psychomaniak@912 247 t="<--" ; [ $(busybox which $i 2>/dev/null) ] || t=---
psychomaniak@912 248 if [ $2 = only-installed ] && [ $t = --- ]; then
psychomaniak@912 249 case $i in
psychomaniak@918 250 a-item) i=show_ALL t="+"${INST_i18n};;
psychomaniak@912 251 *) i=" " t=" " ;; esac
psychomaniak@912 252 fi
psychomaniak@912 253 echo "$i"
psychomaniak@918 254 [ $3 = yad ] || echo -e "$(echo $t | sed "s|---|${INST_i18n}|g ; s| ||g")"
psychomaniak@912 255 done
psychomaniak@912 256 }
psychomaniak@912 257
psychomaniak@912 258 # Screen configuration dialog.
al@813 259 config_dialog() {
psychomaniak@909 260 . /etc/rcS.conf ; LM="ON"
psychomaniak@909 261 [ $LOGIN_MANAGER = "slim" ] || LM="OFF"
psychomaniak@909 262
pankso@66 263 exec 3>&1
al@813 264 value=$($DIALOG \
pankso@535 265 --clear --colors \
pankso@840 266 --title "{ $(_n 'SliTaz Xorg config') }" \
pankso@840 267 --menu "" 16 72 10 \
pankso@840 268 "xorg" "$(_n 'Install or reconfigure Xorg')" \
pankso@840 269 "xorg-light" "$(_n 'Install Xorg server (light version)')" \
psychomaniak@918 270 "onboot" "$(_n 'AutoStart Xorg by SLiM on boot') ...| \Z5$LM\Zn" \
psychomaniak@909 271 "slim" "$(_n '(Re)Start Simple Login Manager now')" \
psychomaniak@918 272 "wm_apps" "$(_n '${INST_i18n}: ${WM_i18n} + applications')" \
pankso@840 273 "quit" "$(_n 'Quit Tazx utility')" \
al@813 274 2>&1 1>&3)
psychomaniak@912 275 dialog_end
pankso@66 276 # Set selected value.
pankso@840 277 case "$value" in
psychomaniak@912 278 xorg)
pankso@339 279 install_xorg ;;
pankso@840 280 xorg-light)
psychomaniak@912 281 inst_pkg xorg-server-light
psychomaniak@912 282 inst_pkg xorg-xf86-video-fbdev
pankso@840 283 xorg_conf_d ;;
psychomaniak@909 284 onboot)
psychomaniak@912 285 inst_pkg slim ; inst_pkg dbus
psychomaniak@909 286 if [ $LM = "OFF" ] ; then
psychomaniak@909 287 LM=slim
psychomaniak@912 288 else LM=""
psychomaniak@909 289 fi
psychomaniak@912 290 sed '/LOGIN_MANAGER/s|=.*$|="'$LM'"|' -i /etc/rcS.conf
psychomaniak@909 291 [ $LM = "slim" ] || LM=disabled
psychomaniak@909 292 echo "start X on boot:" $(boldify $LM) ;;
psychomaniak@909 293 slim)
psychomaniak@912 294 inst_pkg slim ; inst_pkg dbus
psychomaniak@912 295 [ ! -z $XAUTHORITY ] || stopd slim ;sleep 2; startd slim ;;
psychomaniak@912 296 wm_apps)
psychomaniak@920 297 slitaz_apps_conf ; apps_dialog ;;
pankso@840 298 *)
pankso@840 299 exit 0 ;;
pankso@66 300 esac
pankso@66 301 }
pankso@4 302
pankso@870 303 # ~/.config/slitaz/applications.conf: Missing = failed to login
pankso@876 304 # Make users applications.conf in /etc/skel so new added user will get
pankso@876 305 # a working X session. Note --> flavors can have a custom config in
pankso@876 306 # /etc/slitaz/applications that we must use.
pankso@870 307 slitaz_apps_conf() {
pankso@840 308 apps_conf=/etc/slitaz/applications.conf
pankso@870 309
pankso@876 310 if [ "$(id -u)" = 0 ]; then
psychomaniak@912 311 user_conf=${apps_conf}
psychomaniak@912 312 new_user_conf="/etc/skel/.config/slitaz/applications.conf"
psychomaniak@912 313 mkdir -p $(dirname $user_conf); cp -f ${apps_conf} ${new_user_conf}
pankso@876 314 else
pankso@876 315 # If started by: startx and with boot opts screen=text
pankso@876 316 user_conf="$HOME/.config/slitaz/applications.conf"
pankso@876 317 if [ ! -f "$user_conf" ]; then
pankso@876 318 mkdir -p $(dirname $user_conf); cp ${apps_conf} ${user_conf}
pankso@876 319 fi
slaxemulator@538 320 fi
psychomaniak@918 321 [ -f "$HOME/.xinitrc" ] || inst_pkg slitaz-configs-base --forced
pankso@66 322 }
pankso@4 323
pankso@840 324 # Commands
pankso@66 325
pankso@351 326 case "$1" in
pankso@351 327 install-xorg)
pankso@840 328 check_root
pankso@351 329 install_xorg
pankso@870 330 slitaz_apps_conf ;;
pankso@840 331
pankso@415 332 config-xorg)
pankso@840 333 check_root
pankso@870 334 slitaz_apps_conf
pankso@840 335 xorg_conf_d
pankso@840 336 # Handle live option: screen=
pankso@870 337 if grep -qs 'screen=' /proc/cmdline ; then
pascal@564 338 MODE="$(sed 's/.*screen=\([0-9]*x[0-9]*\).*/\1/' < /proc/cmdline)"
pascal@564 339 sed -i "s/.*EndSubSection.*/\\t\\tModes\\t\"$MODE\"\\n&/" \
pascal@564 340 /etc/X11/xorg.conf.d/70-Screen.conf
pascal@564 341 fi ;;
pankso@840 342
pankso@870 343 init)
paul@885 344 # We don't need much config files with last Xorg version, So just
paul@885 345 # get files for starting an X session and config the keyboard.
pankso@870 346 check_root
pankso@870 347 slitaz_apps_conf
pankso@871 348 keyboard_conf
pankso@871 349 gen_xorg_conf_file ;;
pankso@870 350
pankso@879 351 keyboard)
pankso@870 352 echo "Generating: 40-Keyboard.conf"
pankso@870 353 keyboard_conf ;;
pankso@870 354
psychomaniak@912 355 get-applist)
psychomaniak@912 356 slitaz_apps_conf
psychomaniak@912 357 gen_applist $2 $3 $4 ;;
psychomaniak@918 358 auto)
psychomaniak@918 359 autoselect_driver sh
psychomaniak@918 360 inst_pkg xorg-server
psychomaniak@918 361 inst_pkg xorg-xf86-video-${d} ;;
psychomaniak@918 362 bpp)
psychomaniak@918 363 check_root
psychomaniak@918 364 xorg_conf_d
psychomaniak@918 365 case "$2" in 8|15|16|24) colors=$2 ;;
psychomaniak@918 366 *) exec 3>&1 && colors=$($DIALOG --menu " " 12 12 12 \
psychomaniak@918 367 24 truecolor 16 hicolor 15 hicolor 8 256colors 2>&1 1>&3) ; dialog_end ;;
psychomaniak@918 368 esac
psychomaniak@920 369 sed 's|Monitor.*"$|&\n\tDefaultDepth '$colors'|' \
psychomaniak@920 370 -i ${xorg_config}/70-Screen.conf ;;
psychomaniak@918 371 *help)
psychomaniak@918 372 echo "Usage: $(basename $0) [install-xorg|bpp|auto|config-xorg|init|keyboard]" ;;
pankso@351 373 *)
pankso@615 374 # User can get a new .xinitrc with tazx from cmdline.
psychomaniak@918 375 if [ $(id -u) == 0 ]; then
psychomaniak@918 376 slitaz_apps_conf
psychomaniak@918 377 config_dialog
psychomaniak@918 378 else msg="\Z1 $(_n 'Run tazx as root if you need to configure xorg') \Zn"
psychomaniak@918 379 slitaz_apps_conf
psychomaniak@918 380 apps_dialog
psychomaniak@912 381 fi
psychomaniak@912 382 # gen_xsession
psychomaniak@912 383 ;;
pankso@351 384 esac
pankso@4 385
pankso@4 386 exit 0