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.
|
pankso@535
|
4 # This tinyutils 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 #
|
al@813
|
11 . /lib/libtaz.sh
|
al@813
|
12 . /etc/slitaz/slitaz.conf
|
al@813
|
13 export TEXTDOMAIN='slitaz-tools' #i18n
|
al@813
|
14
|
pankso@626
|
15 : ${DIALOG=dialog}
|
pankso@4
|
16
|
pankso@535
|
17 # Default value.
|
mojo@805
|
18 WM=lxde-session
|
pankso@351
|
19
|
pankso@534
|
20 # Default user for config files in Live mode, id is 1000 since it is
|
pankso@534
|
21 # created by /etc/init.d/bootopts.sh.
|
pankso@626
|
22 USER=$(cat /etc/passwd | grep 1000 | cut -d ":" -f 1)
|
pankso@4
|
23
|
pankso@628
|
24 #
|
pankso@615
|
25 # Functions
|
pankso@628
|
26 #
|
pankso@615
|
27
|
al@813
|
28 # Save chunk of xorg.conf into specified file
|
al@813
|
29 save_chunk() {
|
al@813
|
30 sed -e '/Section "'${1#*-}'"/,/EndSection/!d' \
|
al@813
|
31 -e "s/EndSection/EndSection\n/" $xorg_template > \
|
al@813
|
32 $xorg_config/$1.conf
|
pankso@615
|
33 }
|
pankso@66
|
34
|
gokhlayeh@492
|
35 # Populate xorg.conf.d.
|
al@813
|
36 xorg_conf_d() {
|
gokhlayeh@492
|
37 # Define the xorg.conf.d (can be /etc/X11/xorg.conf.d or /usr/share/X11/xorg.conf.d)
|
gokhlayeh@492
|
38 xorg_config=/etc/X11/xorg.conf.d
|
gokhlayeh@492
|
39
|
gokhlayeh@492
|
40 # Define the xorg.conf.new place.
|
gokhlayeh@492
|
41 xorg_template=/root/xorg.conf.new
|
gokhlayeh@492
|
42
|
gokhlayeh@492
|
43 # Obtain a default configuration file from Xorg.
|
pankso@719
|
44 Xorg -configure :2
|
gokhlayeh@492
|
45
|
paul@515
|
46 # Backup existing config.
|
gokhlayeh@513
|
47 tar -cf $xorg_config/../Previous_xorg.conf.d.tar $xorg_config/ &> /dev/null
|
gokhlayeh@513
|
48
|
paul@725
|
49 # Put the different sections in separate files in the config directory.
|
al@813
|
50 save_chunk 10-ServerLayout
|
al@813
|
51 sed -i '/Core/d' $xorg_config/10-ServerLayout.conf
|
al@813
|
52 save_chunk 20-Files
|
al@813
|
53 save_chunk 30-Module
|
al@813
|
54 save_chunk 50-Monitor
|
al@813
|
55 save_chunk 60-Device
|
al@813
|
56 save_chunk 70-Screen
|
gokhlayeh@492
|
57
|
gokhlayeh@492
|
58 # Remove the template.
|
gokhlayeh@492
|
59 rm $xorg_template
|
gokhlayeh@492
|
60
|
gokhlayeh@492
|
61 # Configure the keyboard with the right keymap.
|
al@813
|
62 keymap=$(cat /etc/keymap.conf)
|
gokhlayeh@492
|
63 keyboard_config=$xorg_config/40-Keyboard.conf
|
al@779
|
64 variant=""
|
al@779
|
65 # this XkbOption moved from 40-evdev.conf (xorg-xf86-input-evdev)
|
al@779
|
66 options="terminate:ctrl_alt_bksp"
|
gokhlayeh@494
|
67 case $keymap in
|
pankso@260
|
68 fr_CH-latin1)
|
pankso@260
|
69 # Swiss FrenCH
|
al@779
|
70 layout="ch"; variant="fr" ;;
|
pankso@597
|
71 uk)
|
paul@617
|
72 # English UK
|
al@779
|
73 layout="gb" ;;
|
pankso@260
|
74 ru)
|
pankso@260
|
75 # Russian
|
al@779
|
76 layout="us,ru"
|
al@779
|
77 options="grp:ctrl_shift_toggle, grp_led:scroll, $options" ;;
|
al@813
|
78 ua)
|
al@813
|
79 # Ukrainian
|
al@813
|
80 layout="us,ua,ru"
|
al@813
|
81 options="grp:ctrl_shift_toggle, $options" ;;
|
pankso@303
|
82 slovene)
|
pankso@303
|
83 # Slovenian
|
al@779
|
84 layout="si"; options="grp:alt_shift_toggle, $options" ;;
|
pankso@577
|
85 us-acentos)
|
al@779
|
86 layout="us"; variant="intl" ;;
|
pankso@260
|
87 *)
|
pankso@260
|
88 # Use clean /etc/keymap.conf value.
|
gokhlayeh@492
|
89 keymap=${keymap%-latin1}
|
gokhlayeh@492
|
90 keymap=${keymap%-lat2}
|
gokhlayeh@492
|
91 keymap=${keymap%-lat6}
|
al@779
|
92 layout=${keymap%-abnt2}
|
pankso@260
|
93 esac
|
gokhlayeh@492
|
94
|
al@779
|
95 cat > $keyboard_config << EOC
|
al@779
|
96 Section "InputClass"
|
al@779
|
97 Identifier "Keyboard Defaults"
|
al@779
|
98 MatchIsKeyboard "yes"
|
al@779
|
99 Option "XkbLayout" "$layout"
|
al@779
|
100 Option "XkbVariant" "$variant"
|
al@779
|
101 Option "XkbOptions" "$options"
|
al@779
|
102 EndSection
|
al@779
|
103 EOC
|
al@813
|
104 [ x$variant == x ] && sed -i '/XkbVariant/d' $keyboard_config
|
gokhlayeh@492
|
105
|
gokhlayeh@492
|
106 # Create a xorg.conf if needed.
|
pankso@628
|
107 if [ ! -f /etc/X11/xorg.conf ]; then
|
pankso@628
|
108 cat > /etc/X11/xorg.conf << EOT
|
pankso@628
|
109 # You can put here your own Xorg configurations. This config file is read
|
pankso@628
|
110 # before all files in /etc/X11/xorg.conf.d and will NOT be erased by any
|
slaxemulator@645
|
111 # updates.
|
pankso@628
|
112 EOT
|
pankso@628
|
113 fi
|
pankso@260
|
114 }
|
pankso@260
|
115
|
paul@549
|
116 # Install xorg server.
|
al@813
|
117 install_xorg() {
|
pankso@628
|
118 [ -f "/var/lib/tazpkg/packages.list" ] || tazpkg recharge
|
pankso@117
|
119 exec 3>&1
|
al@813
|
120 value=$($DIALOG \
|
al@813
|
121 --clear --colors \
|
al@813
|
122 --title " $(_n 'Install Xorg') " \
|
al@813
|
123 --menu "$(_n 'Tazx helps you to select your X driver.')" 16 70 8 \
|
pankso@635
|
124 $(fgrep xorg-xf86-video /var/lib/tazpkg/packages.list | cut -d- -f4 | \
|
al@813
|
125 while read x; do echo $x; _ 'driver'; done) \
|
al@813
|
126 "quit" "$(_n 'Quit')" \
|
al@813
|
127 2>&1 1>&3)
|
pankso@117
|
128 retval=$?
|
pankso@117
|
129 exec 3>&-
|
al@813
|
130
|
pankso@628
|
131 # Continue or exit.
|
pankso@117
|
132 case $retval in
|
pankso@628
|
133 0) continue ;;
|
pankso@628
|
134 1|255) exit 0 ;;
|
pankso@117
|
135 esac
|
al@813
|
136
|
pankso@117
|
137 # Set selected value.
|
pankso@117
|
138 case $value in
|
pankso@628
|
139 quit) exit 0 ;;
|
pankso@117
|
140 *)
|
pankso@628
|
141 installed=/var/lib/tazpkg/installed/
|
pankso@628
|
142 [ -d "$installed/xorg-server" ] || tazpkg get-install xorg-server
|
pankso@628
|
143 [ -d "$installed/xorg-xf86-video-$value" ] || \
|
pankso@628
|
144 tazpkg get-install xorg-xf86-video-$value
|
pankso@628
|
145 xorg_conf_d ;;
|
pankso@117
|
146 esac
|
pankso@117
|
147 }
|
pankso@117
|
148
|
pankso@628
|
149 # Screen configuration dialog. TODO: menus items to enable/disable X on boot
|
pankso@628
|
150 # and sed /etc/rcS.conf to remove slim from RUN_DAEMONS.
|
al@813
|
151 config_dialog() {
|
pankso@66
|
152 exec 3>&1
|
al@813
|
153 value=$($DIALOG \
|
pankso@535
|
154 --clear --colors \
|
al@813
|
155 --title " $(_n 'Configure X') " \
|
pankso@628
|
156 --menu "\
|
al@813
|
157 $(_n 'Tazx dialog helps you to configure your Xorg server.')\n\n\
|
al@813
|
158 $(_n 'Window Manager:') \Z2$WM\Zn \n\
|
al@813
|
159 $(_n 'X server:') \Z2Xorg\Zn" 16 70 3 \
|
al@813
|
160 "xorg" "$(_n 'Install or reconfigure Xorg')" \
|
al@813
|
161 "xfbdev" "$(_n 'Install TinyX server Xfbdev')" \
|
al@813
|
162 "quit" "$(_n 'Quit Tazx utility')" \
|
al@813
|
163 2>&1 1>&3)
|
pankso@66
|
164 retval=$?
|
pankso@66
|
165 exec 3>&-
|
al@813
|
166
|
pankso@628
|
167 # Continue or exit.
|
pankso@66
|
168 case $retval in
|
pankso@628
|
169 0) continue ;;
|
pankso@628
|
170 1|255) exit 0 ;;
|
pankso@66
|
171 esac
|
al@813
|
172
|
pankso@66
|
173 # Set selected value.
|
pankso@66
|
174 case $value in
|
pankso@117
|
175 xorg)
|
pankso@339
|
176 install_xorg ;;
|
pankso@628
|
177 xfbdev)
|
pankso@628
|
178 # FIXME: Much to do here, for now just install Xfbdev.
|
pankso@685
|
179 tazpkg get-install xorg-server-Xfbdev ;;
|
pankso@628
|
180 *) exit 0 ;;
|
pankso@66
|
181 esac
|
pankso@66
|
182 }
|
pankso@4
|
183
|
pankso@339
|
184 # Window manager specific configuration.
|
al@813
|
185 wm_config() {
|
pankso@339
|
186 case $WM in
|
pankso@339
|
187 ob|openbox)
|
pankso@339
|
188 WM=openbox-session
|
pankso@339
|
189 # Check if a personal autostart script exists if OB is installed.
|
al@813
|
190 if [ -d "$INSTALLED/openbox" ]; then
|
pankso@339
|
191 if [ ! -f "$HOME/.config/openbox/autostart.sh" ]; then
|
pankso@339
|
192 mkdir -p $HOME/.config/openbox
|
pankso@339
|
193 cp /etc/xdg/openbox/autostart.sh $HOME/.config/openbox
|
pankso@339
|
194 fi
|
pankso@339
|
195 # Script for default user (uid=1000).
|
pankso@339
|
196 if [ ! -f "/home/$USER/.config/openbox/autostart.sh" ]; then
|
pankso@339
|
197 mkdir -p /home/$USER/.config/openbox
|
pankso@339
|
198 cp /etc/xdg/openbox/autostart.sh /home/$USER/.config/openbox
|
pankso@339
|
199 fi
|
pankso@339
|
200 if [ ! -f "/home/$USER/.config/openbox/menu.xml" ]; then
|
pankso@339
|
201 mkdir -p /home/$USER/.config/openbox
|
pankso@339
|
202 cp /etc/xdg/openbox/menu.xml /home/$USER/.config/openbox
|
pankso@339
|
203 fi
|
slaxemulator@540
|
204 chown -R $USER.users /home/$USER/.config
|
pankso@339
|
205 fi ;;
|
pankso@339
|
206 jwm)
|
pankso@339
|
207 WM=jwm
|
pankso@339
|
208 JWM_CONFIG=$HOME/.jwmrc
|
al@813
|
209 if [ -d "$INSTALLED/jwm" ]; then
|
pankso@339
|
210 if [ ! -f "$JWM_CONFIG" ]; then
|
pankso@339
|
211 cp /etc/jwm/system.jwmrc $JWM_CONFIG
|
pankso@339
|
212 fi
|
pankso@339
|
213 # In Live mode default user/root JWM config does not exist and
|
pankso@402
|
214 # $HOME is not set, this is because tazx is executed by boot
|
pankso@339
|
215 # scripts.
|
pankso@339
|
216 if [ ! -f "/home/$USER/.jwmrc" ]; then
|
pankso@339
|
217 cp /etc/jwm/system.jwmrc /home/$USER/.jwmrc
|
slaxemulator@540
|
218 chown $USER.users /home/$USER/.jwmrc
|
pankso@339
|
219 fi
|
al@813
|
220 if [ ! -f "/root/.jwmrc" -a $(id -u) = 0 ]; then
|
pankso@339
|
221 cp /etc/jwm/system.jwmrc /root/.jwmrc
|
pankso@339
|
222 fi
|
pankso@339
|
223 fi ;;
|
pankso@339
|
224 pekwm)
|
pankso@339
|
225 WM=pekwm
|
al@813
|
226 if [ -d "$INSTALLED/pekwm" ]; then
|
pankso@339
|
227 if [ -d "$HOME/.pekwm" ]; then
|
pankso@339
|
228 cp -R /etc/pekwm $HOME/.pekwm
|
pankso@339
|
229 fi
|
pankso@339
|
230 # In Live mode we want config before starting pekwm the first time.
|
pankso@339
|
231 if [ ! -d "/home/$USER/.pekwm" ]; then
|
pankso@339
|
232 cp -R /etc/pekwm /home/$USER/.pekwm
|
slaxemulator@540
|
233 chown -R $USER.users /home/$USER/.pekwm
|
pankso@339
|
234 chmod +x /home/$USER/.pekwm/start
|
pankso@339
|
235 fi
|
pankso@339
|
236 if [ ! -d "/root/.pekwm" -a `id -u` = 0 ]; then
|
pankso@339
|
237 cp -R /etc/pekwm /root/.pekwm
|
pankso@339
|
238 chmod +x /root/.pekwm/start
|
pankso@339
|
239 fi
|
pankso@339
|
240 fi ;;
|
pankso@339
|
241 e17|enlightenment)
|
pankso@535
|
242 WM=enlightenment_start ;;
|
pankso@339
|
243 fluxbox)
|
pankso@535
|
244 WM=startfluxbox ;;
|
pankso@339
|
245 dwm|karmen)
|
pankso@535
|
246 WM=$WM-session ;;
|
pankso@339
|
247 awesome)
|
pankso@535
|
248 WM=awesome ;;
|
erjo@396
|
249 xfce|xfce4)
|
pankso@535
|
250 WM=xfce4-session ;;
|
pankso@339
|
251 esac
|
pankso@81
|
252 }
|
pankso@81
|
253
|
pankso@68
|
254 # Sample xinitrc for user (WM can be specified with F1 at slim login).
|
al@813
|
255 xinitrc_sample() {
|
al@813
|
256 cat > $1 << "EOF"
|
pankso@68
|
257 # ~/.xinitrc: Executed by slim login manager to startx X session.
|
paul@515
|
258 # You can use F1 with Slim to change your window manager or configure
|
paul@515
|
259 # it permanently with your personal applications.conf file.
|
pankso@68
|
260 #
|
pankso@339
|
261 . $HOME/.config/slitaz/applications.conf
|
pankso@99
|
262
|
pankso@117
|
263 case $1 in
|
al@813
|
264 e17|enlightenment*) exec enlightenment_start ;;
|
al@813
|
265 openbox|openbox-session|ob) exec openbox-session ;;
|
al@813
|
266 dwm|dwm-session) exec dwm-session ;;
|
al@813
|
267 fluxbox|startfluxbox) exec startfluxbox ;;
|
al@813
|
268 awesome) exec awesome ;;
|
al@813
|
269 pekwm) exec pekwm ;;
|
al@813
|
270 karmen|karmen-session) exec karmen-session ;;
|
al@813
|
271 jwm) lxpanel & exec jwm ;;
|
al@813
|
272 xfce|xfce4|xfce4-session) xfce4-session ;;
|
al@813
|
273 *) exec $WINDOW_MANAGER ;;
|
pankso@68
|
274 esac
|
pankso@68
|
275 EOF
|
pankso@339
|
276 # Set default WM in applications.conf user file. Default WM can be
|
paul@515
|
277 # configured graphically with 'desktopbox tazapps'
|
pankso@339
|
278 . $CONFIG
|
al@813
|
279 sed -i 's|WINDOW_MANAGER=.*|WINDOW_MANAGER="'$WM'"|' $CONFIG
|
pankso@68
|
280 }
|
pankso@68
|
281
|
pankso@535
|
282 # ~/.xinitrc for X login from a DM.
|
al@813
|
283 creat_xinitrc() {
|
al@813
|
284 local APCONF=/etc/slitaz/applications.conf
|
al@813
|
285
|
pankso@339
|
286 CONFIG=$HOME/.config/slitaz/applications.conf
|
pankso@339
|
287 if [ ! -f $CONFIG ]; then
|
al@813
|
288 mkdir -p $(dirname $CONFIG); cp $APCONF $CONFIG
|
pankso@339
|
289 fi
|
al@813
|
290 xinitrc_sample $HOME/.xinitrc
|
al@813
|
291
|
al@813
|
292 # Make .xinitrc and config for /etc/skel so new added user will get
|
pankso@535
|
293 # a working X session.
|
pankso@535
|
294 if test $(id -u) = 0; then
|
pankso@535
|
295 CONFIG=/etc/skel/.config/slitaz/applications.conf
|
al@813
|
296 mkdir -p $(dirname $CONFIG); cp -f $APCONF $CONFIG
|
al@813
|
297 xinitrc_sample /etc/skel/.xinitrc
|
pankso@535
|
298 fi
|
al@813
|
299
|
pankso@209
|
300 # In Live mode default user needs a xinitrc, since tazx
|
pankso@68
|
301 # is executed only by root.
|
slaxemulator@538
|
302 CONFIG=/home/$USER/.config/slitaz/applications.conf
|
slaxemulator@538
|
303 if [ ! -f $CONFIG ]; then
|
al@813
|
304 mkdir -p $(dirname $CONFIG); cp $APCONF $CONFIG
|
slaxemulator@538
|
305 fi
|
slaxemulator@540
|
306 chown -R $USER.users /home/$USER/.config/slitaz
|
al@813
|
307
|
al@813
|
308 FILE=/home/$USER/.xinitrc
|
al@813
|
309 if [ ! -f $FILE ]; then
|
al@813
|
310 xinitrc_sample $FILE
|
slaxemulator@540
|
311 chown $USER.users $FILE
|
pankso@105
|
312 fi
|
pankso@66
|
313 }
|
pankso@45
|
314
|
MikeDSmith25@252
|
315 # Create ~/.xsession to keep the configuration selected (used
|
MikeDSmith25@252
|
316 # only by startx, Slim login manager uses .xinitrc).
|
al@813
|
317 creat_xsession() {
|
al@813
|
318 local xsession=$HOME/.xsession
|
al@813
|
319 [ -f $xsession ] && cp -f $xsession $HOME/.previous_xsession
|
al@813
|
320 cat > $xsession << _EOF_
|
pankso@68
|
321 # ~/.xsession: Start X window session manually on your system (startx).
|
pankso@37
|
322 #
|
pankso@535
|
323 Xorg &
|
pankso@535
|
324 #xterm &
|
pankso@68
|
325 _EOF_
|
pankso@99
|
326 # LXpanel by default with JWM.
|
pankso@117
|
327 if [ "$WM" = "jwm" ]; then
|
al@813
|
328 echo 'lxpanel &' >> $xsession
|
pankso@99
|
329 fi
|
al@813
|
330 echo "exec $WM" >> $xsession
|
al@813
|
331 chmod 700 $xsession
|
pankso@66
|
332 }
|
pankso@4
|
333
|
pankso@615
|
334
|
pankso@615
|
335 # Commands - WM can be specified on cmdline.
|
pankso@66
|
336
|
pankso@351
|
337 case "$1" in
|
pankso@351
|
338 install-xorg)
|
al@813
|
339 check_root $@
|
pankso@351
|
340 if [ -n "$2" ]; then
|
pankso@402
|
341 WM=$2
|
pankso@351
|
342 fi
|
pankso@535
|
343 echo "xorg" > /etc/X11/screen.conf
|
pankso@351
|
344 install_xorg
|
pankso@351
|
345 wm_config
|
pankso@351
|
346 creat_xinitrc
|
pankso@351
|
347 creat_xsession ;;
|
pankso@415
|
348 config-xorg)
|
al@813
|
349 check_root $@
|
pankso@415
|
350 if [ -n "$2" ]; then
|
pankso@415
|
351 WM=$2
|
pankso@415
|
352 fi
|
pankso@535
|
353 echo "xorg" > /etc/X11/screen.conf
|
pankso@415
|
354 wm_config
|
pankso@415
|
355 creat_xinitrc
|
pankso@415
|
356 creat_xsession
|
pascal@564
|
357 xorg_conf_d
|
pascal@564
|
358 if grep -qs screen= /proc/cmdline ; then
|
pascal@564
|
359 MODE="$(sed 's/.*screen=\([0-9]*x[0-9]*\).*/\1/' < /proc/cmdline)"
|
pascal@564
|
360 sed -i "s/.*EndSubSection.*/\\t\\tModes\\t\"$MODE\"\\n&/" \
|
pascal@564
|
361 /etc/X11/xorg.conf.d/70-Screen.conf
|
pascal@564
|
362 fi ;;
|
pankso@351
|
363 *)
|
pankso@615
|
364 # User can get a new .xinitrc with tazx from cmdline.
|
pankso@351
|
365 if [ -n "$1" ]; then
|
pankso@402
|
366 WM=$1
|
pankso@351
|
367 fi
|
pankso@535
|
368 if test $(id -u) = 0; then
|
pankso@535
|
369 echo "xorg" > /etc/X11/screen.conf
|
pankso@628
|
370 config_dialog
|
pankso@535
|
371 fi
|
pankso@351
|
372 wm_config
|
pankso@351
|
373 creat_xinitrc
|
pankso@351
|
374 creat_xsession ;;
|
pankso@351
|
375 esac
|
pankso@4
|
376
|
pankso@4
|
377 exit 0
|