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
|
pankso@626
|
24 : ${DIALOG=dialog}
|
pankso@4
|
25
|
pankso@535
|
26 # Default value.
|
pankso@840
|
27 WM=${WINDOW_MANAGER}
|
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
|
gokhlayeh@492
|
44 # Populate xorg.conf.d.
|
al@813
|
45 xorg_conf_d() {
|
gokhlayeh@492
|
46 # Define the xorg.conf.d (can be /etc/X11/xorg.conf.d or /usr/share/X11/xorg.conf.d)
|
gokhlayeh@492
|
47 xorg_config=/etc/X11/xorg.conf.d
|
gokhlayeh@492
|
48
|
gokhlayeh@492
|
49 # Define the xorg.conf.new place.
|
gokhlayeh@492
|
50 xorg_template=/root/xorg.conf.new
|
gokhlayeh@492
|
51
|
gokhlayeh@492
|
52 # Obtain a default configuration file from Xorg.
|
pankso@719
|
53 Xorg -configure :2
|
gokhlayeh@492
|
54
|
paul@515
|
55 # Backup existing config.
|
gokhlayeh@513
|
56 tar -cf $xorg_config/../Previous_xorg.conf.d.tar $xorg_config/ &> /dev/null
|
gokhlayeh@513
|
57
|
paul@725
|
58 # Put the different sections in separate files in the config directory.
|
al@813
|
59 save_chunk 10-ServerLayout
|
al@813
|
60 sed -i '/Core/d' $xorg_config/10-ServerLayout.conf
|
al@813
|
61 save_chunk 20-Files
|
al@813
|
62 save_chunk 30-Module
|
al@813
|
63 save_chunk 50-Monitor
|
al@813
|
64 save_chunk 60-Device
|
al@813
|
65 save_chunk 70-Screen
|
gokhlayeh@492
|
66
|
gokhlayeh@492
|
67 # Remove the template.
|
gokhlayeh@492
|
68 rm $xorg_template
|
gokhlayeh@492
|
69
|
gokhlayeh@492
|
70 # Configure the keyboard with the right keymap.
|
al@813
|
71 keymap=$(cat /etc/keymap.conf)
|
gokhlayeh@492
|
72 keyboard_config=$xorg_config/40-Keyboard.conf
|
al@779
|
73 variant=""
|
al@779
|
74 # this XkbOption moved from 40-evdev.conf (xorg-xf86-input-evdev)
|
al@779
|
75 options="terminate:ctrl_alt_bksp"
|
gokhlayeh@494
|
76 case $keymap in
|
pankso@260
|
77 fr_CH-latin1)
|
pankso@260
|
78 # Swiss FrenCH
|
al@779
|
79 layout="ch"; variant="fr" ;;
|
pankso@597
|
80 uk)
|
paul@617
|
81 # English UK
|
al@779
|
82 layout="gb" ;;
|
pankso@260
|
83 ru)
|
pankso@260
|
84 # Russian
|
al@779
|
85 layout="us,ru"
|
al@779
|
86 options="grp:ctrl_shift_toggle, grp_led:scroll, $options" ;;
|
al@813
|
87 ua)
|
al@813
|
88 # Ukrainian
|
al@813
|
89 layout="us,ua,ru"
|
al@813
|
90 options="grp:ctrl_shift_toggle, $options" ;;
|
pankso@303
|
91 slovene)
|
pankso@303
|
92 # Slovenian
|
al@779
|
93 layout="si"; options="grp:alt_shift_toggle, $options" ;;
|
pankso@577
|
94 us-acentos)
|
al@779
|
95 layout="us"; variant="intl" ;;
|
pankso@260
|
96 *)
|
pankso@260
|
97 # Use clean /etc/keymap.conf value.
|
gokhlayeh@492
|
98 keymap=${keymap%-latin1}
|
gokhlayeh@492
|
99 keymap=${keymap%-lat2}
|
gokhlayeh@492
|
100 keymap=${keymap%-lat6}
|
al@779
|
101 layout=${keymap%-abnt2}
|
pankso@260
|
102 esac
|
gokhlayeh@492
|
103
|
al@779
|
104 cat > $keyboard_config << EOC
|
al@779
|
105 Section "InputClass"
|
al@779
|
106 Identifier "Keyboard Defaults"
|
al@779
|
107 MatchIsKeyboard "yes"
|
al@779
|
108 Option "XkbLayout" "$layout"
|
al@779
|
109 Option "XkbVariant" "$variant"
|
al@779
|
110 Option "XkbOptions" "$options"
|
al@779
|
111 EndSection
|
al@779
|
112 EOC
|
al@813
|
113 [ x$variant == x ] && sed -i '/XkbVariant/d' $keyboard_config
|
gokhlayeh@492
|
114
|
gokhlayeh@492
|
115 # Create a xorg.conf if needed.
|
pankso@628
|
116 if [ ! -f /etc/X11/xorg.conf ]; then
|
pankso@628
|
117 cat > /etc/X11/xorg.conf << EOT
|
pankso@628
|
118 # You can put here your own Xorg configurations. This config file is read
|
pankso@628
|
119 # before all files in /etc/X11/xorg.conf.d and will NOT be erased by any
|
slaxemulator@645
|
120 # updates.
|
pankso@628
|
121 EOT
|
pankso@628
|
122 fi
|
pankso@260
|
123 }
|
pankso@260
|
124
|
paul@549
|
125 # Install xorg server.
|
al@813
|
126 install_xorg() {
|
pankso@628
|
127 [ -f "/var/lib/tazpkg/packages.list" ] || tazpkg recharge
|
pankso@117
|
128 exec 3>&1
|
al@813
|
129 value=$($DIALOG \
|
al@813
|
130 --clear --colors \
|
al@813
|
131 --title " $(_n 'Install Xorg') " \
|
al@813
|
132 --menu "$(_n 'Tazx helps you to select your X driver.')" 16 70 8 \
|
pankso@635
|
133 $(fgrep xorg-xf86-video /var/lib/tazpkg/packages.list | cut -d- -f4 | \
|
al@813
|
134 while read x; do echo $x; _ 'driver'; done) \
|
al@813
|
135 "quit" "$(_n 'Quit')" \
|
al@813
|
136 2>&1 1>&3)
|
pankso@117
|
137 retval=$?
|
pankso@117
|
138 exec 3>&-
|
al@813
|
139
|
pankso@628
|
140 # Continue or exit.
|
pankso@117
|
141 case $retval in
|
pankso@628
|
142 0) continue ;;
|
pankso@628
|
143 1|255) exit 0 ;;
|
pankso@117
|
144 esac
|
al@813
|
145
|
pankso@117
|
146 # Set selected value.
|
pankso@117
|
147 case $value in
|
pankso@628
|
148 quit) exit 0 ;;
|
pankso@117
|
149 *)
|
pankso@840
|
150 [ -d "$installed/xorg-server" ] || tazpkg -gi xorg-server
|
pankso@628
|
151 [ -d "$installed/xorg-xf86-video-$value" ] || \
|
pankso@840
|
152 tazpkg -gi xorg-xf86-video-$value
|
pankso@628
|
153 xorg_conf_d ;;
|
pankso@117
|
154 esac
|
pankso@117
|
155 }
|
pankso@117
|
156
|
pankso@628
|
157 # Screen configuration dialog. TODO: menus items to enable/disable X on boot
|
pankso@628
|
158 # and sed /etc/rcS.conf to remove slim from RUN_DAEMONS.
|
al@813
|
159 config_dialog() {
|
pankso@66
|
160 exec 3>&1
|
al@813
|
161 value=$($DIALOG \
|
pankso@535
|
162 --clear --colors \
|
pankso@840
|
163 --title "{ $(_n 'SliTaz Xorg config') }" \
|
pankso@840
|
164 --menu "" 16 72 10 \
|
pankso@840
|
165 "xorg" "$(_n 'Install or reconfigure Xorg')" \
|
pankso@840
|
166 "xorg-light" "$(_n 'Install Xorg server (light version)')" \
|
pankso@840
|
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@840
|
179 case "$value" in
|
pankso@840
|
180 xorg)
|
pankso@339
|
181 install_xorg ;;
|
pankso@840
|
182 xorg-light)
|
pankso@840
|
183 [ -d "$installed/xorg-server-light" ] || \
|
pankso@840
|
184 tazpkg -gi xorg-server-light
|
pankso@840
|
185 [ -d "$installed/xorg-xf86-video-fbdev" ] || \
|
pankso@840
|
186 tazpkg -gi xorg-xf86-video-fbdev
|
pankso@840
|
187 xorg_conf_d ;;
|
pankso@840
|
188 *)
|
pankso@840
|
189 exit 0 ;;
|
pankso@66
|
190 esac
|
pankso@66
|
191 }
|
pankso@4
|
192
|
pankso@535
|
193 # ~/.xinitrc for X login from a DM.
|
al@813
|
194 creat_xinitrc() {
|
pankso@840
|
195 apps_conf=/etc/slitaz/applications.conf
|
pankso@840
|
196 user_conf="$HOME/.config/slitaz/applications.conf"
|
pankso@840
|
197 xinitrc="$HOME/.xinitrc"
|
pankso@840
|
198 if [ ! -f "$user_conf" ]; then
|
pankso@840
|
199 mkdir -p $(dirname $user_conf); cp ${apps_conf} ${user_conf}
|
pankso@339
|
200 fi
|
pankso@840
|
201 if [ ! -f "$xinitrc" ]; then
|
pankso@840
|
202 cp /etc/skel/.xinitrc ${xinitrc}
|
pankso@840
|
203 fi
|
al@813
|
204
|
al@813
|
205 # Make .xinitrc and config for /etc/skel so new added user will get
|
pankso@535
|
206 # a working X session.
|
pankso@535
|
207 if test $(id -u) = 0; then
|
pankso@840
|
208 user_conf="/etc/skel/.config/slitaz/applications.conf"
|
pankso@840
|
209 mkdir -p $(dirname $user_conf); cp -f ${apps_conf} ${user_conf}
|
pankso@535
|
210 fi
|
al@813
|
211
|
pankso@840
|
212 # In Live mode default user needs a xinitrc, since tazx is executed
|
pankso@840
|
213 # only by root.
|
pankso@840
|
214 user_conf="/home/$USER/.config/slitaz/applications.conf"
|
pankso@840
|
215 xinitrc="/home/$USER/.xinitrc"
|
pankso@840
|
216 if [ ! -f "$user_conf" ]; then
|
pankso@840
|
217 mkdir -p $(dirname $user_conf); cp ${apps_conf} ${user_conf}
|
pankso@840
|
218 chown -R $USER.users $(dirname $user_conf)
|
slaxemulator@538
|
219 fi
|
pankso@840
|
220 if [ ! -f "$xinitrc" ]; then
|
pankso@840
|
221 cp -f /etc/skel/.xinitrc ${xinitrc}
|
pankso@840
|
222 chown $USER.users ${xinitrc}
|
pankso@105
|
223 fi
|
pankso@66
|
224 }
|
pankso@45
|
225
|
MikeDSmith25@252
|
226 # Create ~/.xsession to keep the configuration selected (used
|
MikeDSmith25@252
|
227 # only by startx, Slim login manager uses .xinitrc).
|
al@813
|
228 creat_xsession() {
|
al@813
|
229 local xsession=$HOME/.xsession
|
pankso@840
|
230 [ -f "$xsession" ] && cp -f ${xsession} ${xsession}.bak
|
pankso@840
|
231 cat > ${xsession} << EOT
|
pankso@840
|
232 # ~/.xsession: Start X session manually on your system with: startx
|
pankso@37
|
233 #
|
pankso@535
|
234 Xorg &
|
pankso@535
|
235 #xterm &
|
pankso@840
|
236 exec $WM
|
pankso@840
|
237 EOT
|
pankso@840
|
238 chmod 700 ${xsession}
|
pankso@66
|
239 }
|
pankso@4
|
240
|
pankso@840
|
241 # Commands
|
pankso@66
|
242
|
pankso@351
|
243 case "$1" in
|
pankso@351
|
244 install-xorg)
|
pankso@840
|
245 check_root
|
pankso@351
|
246 install_xorg
|
pankso@351
|
247 creat_xinitrc
|
pankso@351
|
248 creat_xsession ;;
|
pankso@840
|
249
|
pankso@415
|
250 config-xorg)
|
pankso@840
|
251 check_root
|
pankso@415
|
252 creat_xinitrc
|
pankso@415
|
253 creat_xsession
|
pankso@840
|
254 xorg_conf_d
|
pankso@840
|
255 # Handle live option: screen=
|
pascal@564
|
256 if grep -qs screen= /proc/cmdline ; then
|
pascal@564
|
257 MODE="$(sed 's/.*screen=\([0-9]*x[0-9]*\).*/\1/' < /proc/cmdline)"
|
pascal@564
|
258 sed -i "s/.*EndSubSection.*/\\t\\tModes\\t\"$MODE\"\\n&/" \
|
pascal@564
|
259 /etc/X11/xorg.conf.d/70-Screen.conf
|
pascal@564
|
260 fi ;;
|
pankso@840
|
261
|
pankso@840
|
262 *help)
|
pankso@840
|
263 echo "Usage: $(basename $0) [install-xorg|config-xorg|]" ;;
|
pankso@840
|
264
|
pankso@351
|
265 *)
|
pankso@615
|
266 # User can get a new .xinitrc with tazx from cmdline.
|
pankso@840
|
267 [ $(id -u) == 0 ] && config_dialog
|
pankso@351
|
268 creat_xinitrc
|
pankso@351
|
269 creat_xsession ;;
|
pankso@351
|
270 esac
|
pankso@4
|
271
|
pankso@4
|
272 exit 0
|