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