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