694 lines
22 KiB
Bash
Executable File
694 lines
22 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# casper-a11y-enable - Sets accessibility profile settings for the live session
|
|
# or installed system.
|
|
#
|
|
# This script is called by several other scripts, as well as ubiquity itself to
|
|
# set up accessibility profile settings for use in the live environment and on
|
|
# an installed system.
|
|
#
|
|
# Copyright (C) 2011, Canonical Ltd.
|
|
#
|
|
# Author:
|
|
# - Luke Yelavich <luke.yelavich@canonical.com>
|
|
#
|
|
# This script is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License as published by the Free
|
|
# Software Foundation; either version 2 of the License, or at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this application; if not, write to the Free Software Foundation, Inc., 51
|
|
# Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
##################################################################################
|
|
|
|
set -e
|
|
|
|
### PROFILE SETTINGS METHODS BEGIN HERE ###
|
|
# The methods that are used to set profile data have been placed as close to the
|
|
# top of this file as possible, so they are easy to locate, and will hopefully
|
|
# save time when making smaller changes.
|
|
|
|
# Common settings for low vision profiles. Any change you make here will affect
|
|
# all low vision profiles, for both the user session and login manager.
|
|
set_common_lowvis()
|
|
{
|
|
gset com.canonical.indicator.datetime show-calendar false
|
|
gset org.gnome.desktop.interface toolkit-accessibility true
|
|
gset org.gnome.yelp show-cursor true
|
|
}
|
|
|
|
# Common settings for motor profiles. Any change you make here will affect
|
|
# all motor profiles, for both the user session and login manager.
|
|
set_common_motor()
|
|
{
|
|
gset org.gnome.desktop.a11y.keyboard enable true
|
|
gset org.gnome.desktop.a11y.keyboard stickykeys-enable true
|
|
gset org.gnome.desktop.a11y.keyboard stickykeys-two-key-off false
|
|
}
|
|
|
|
# Settings for the high-contrast profile.
|
|
set_high_contrast()
|
|
{
|
|
gset org.gnome.desktop.interface icon-theme HighContrast
|
|
gset org.gnome.desktop.interface monospace-font-name \"monospace 18\"
|
|
gset org.gnome.desktop.interface font-name "\"sans 18\""
|
|
gset org.gnome.desktop.background picture-uri ""
|
|
gset org.gnome.desktop.background picture-options none
|
|
gset org.gnome.desktop.background primary-color \#666666
|
|
gset org.gnome.desktop.background secondary-color \#7F7F7F
|
|
gset org.gnome.desktop.background color-shading-type solid
|
|
gset org.gnome.desktop.interface cursor-size 48
|
|
gset org.gnome.desktop.interface cursor-theme whiteglass
|
|
kderc_addtoprefixes /usr/share/kubuntu-default-settings/kde-profile/lesser-visual-impairment/
|
|
if [ -d $CHROOT_DIR/usr/share/xubuntu-default-settings/accessibility ]; then
|
|
cp -a $CHROOT_DIR/usr/share/xubuntu-default-settings/accessibility/* $CHROOT_DIR/etc/xdg/
|
|
fi
|
|
|
|
if [ -n "$SET_LOGIN" ]; then
|
|
if [ -d $CHROOT_DIR/etc/lightdm ]; then
|
|
gset_lightdm com.canonical.unity-greeter high-contrast true
|
|
fi
|
|
if [ -d $CHROOT_DIR/etc/gdm3 ]; then
|
|
gset_gdm org.gnome.desktop.interface icon-theme HighContrast
|
|
gset_gdm org.gnome.desktop.interface monospace-font-name \"monospace 18\"
|
|
gset_gdm org.gnome.desktop.interface font-name "\"sans 18\""
|
|
fi
|
|
fi
|
|
}
|
|
|
|
set_magnifier()
|
|
{
|
|
# Ubuntu
|
|
gset org.gnome.desktop.a11y.applications screen-magnifier-enabled true
|
|
set_orca_config magnifier
|
|
|
|
# Kubuntu
|
|
kderc_addtoprefixes /usr/share/kubuntu-default-settings/kde-profile/lesser-visual-impairment/,/usr/share/kubuntu-default-settings/kde-profile/moderate-visual-impairment/
|
|
}
|
|
|
|
set_blindness()
|
|
{
|
|
gset org.gnome.desktop.a11y.applications screen-reader-enabled true
|
|
gset org.gnome.empathy.conversation theme \"classic\"
|
|
set_orca_config speech
|
|
|
|
if [ -n "$SET_LOGIN" ]; then
|
|
if [ -d $CHROOT_DIR/etc/lightdm ]; then
|
|
gset_lightdm com.canonical.unity-greeter screen-reader true
|
|
fi
|
|
if [ -d $CHROOT_DIR/etc/gdm3 ]; then
|
|
gset_gdm org.gnome.desktop.a11y.applications screen-reader-enabled true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
set_braille()
|
|
{
|
|
gset org.gnome.desktop.a11y.applications screen-reader-enabled true
|
|
gset org.gnome.empathy.conversation theme \"classic\"
|
|
set_orca_config braille
|
|
|
|
if [ -n "$SET_LOGIN" ]; then
|
|
if [ -d $CHROOT_DIR/etc/lightdm ]; then
|
|
gset_lightdm com.canonical.unity-greeter screen-reader true
|
|
fi
|
|
if [ -d $CHROOT_DIR/etc/gdm3 ]; then
|
|
gset_gdm org.gnome.desktop.a11y.applications screen-reader-enabled true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
set_keyboard_modifiers()
|
|
{
|
|
gset org.gnome.desktop.a11y.keyboard mousekeys-enable true
|
|
gset org.gnome.desktop.a11y.keyboard stickykeys-modifier-beep true
|
|
gset org.gnome.settings-daemon.peripherals.keyboard repeat true
|
|
gset org.gnome.settings-daemon.peripherals.keyboard delay 700
|
|
gset org.gnome.settings-daemon.peripherals.keyboard repeat-interval 10
|
|
kderc_addtoprefixes /usr/share/kubuntu-default-settings/kde-profile/minor-motor-difficulties/
|
|
if [ -e $CHROOT_DIR/etc/xdg/xfce4/mcs_settings/keyboard.xml ]; then
|
|
sed -i 's/0/1/' $CHROOT_DIR/etc/xdg/xfce4/mcs_settings/keyboard.xml
|
|
fi
|
|
}
|
|
|
|
set_onscreen_keyboard()
|
|
{
|
|
gset org.gnome.desktop.interface toolkit-accessibility true
|
|
gset org.gnome.desktop.a11y.keyboard stickykeys-modifier-beep false
|
|
gset org.gnome.desktop.a11y.applications screen-keyboard-enabled true
|
|
|
|
if [ -n "$SET_LOGIN" ]; then
|
|
if [ -d $CHROOT_DIR/etc/lightdm ]; then
|
|
gset_lightdm com.canonical.unity-greeter onscreen-keyboard true
|
|
fi
|
|
if [ -d $CHROOT_DIR/etc/gdm3 ]; then
|
|
gset_gdm org.gnome.desktop.interface toolkit-accessibility true
|
|
gset_gdm org.gnome.desktop.a11y.keyboard stickykeys-modifier-beep false
|
|
gset_gdm org.gnome.desktop.a11y.applications screen-keyboard-enabled true
|
|
fi
|
|
fi
|
|
|
|
kderc_addtoprefixes /usr/share/kubuntu-default-settings/kde-profile/minor-motor-difficulties/,/usr/share/kubuntu-default-settings/kde-profile/motor-difficulties-pointing-devices/
|
|
if [ -e $CHROOT_DIR/etc/xdg/xfce4/mcs_settings/keyboard.xml ]; then
|
|
sed -i '/Sticky/ s/0/1/' $CHROOT_DIR/etc/xdg/xfce4/mcs_settings/keyboard.xml
|
|
fi
|
|
}
|
|
### PROFILE SETTINGS METHODS END HERE ###
|
|
|
|
help()
|
|
{
|
|
cat <<EOF
|
|
Usage: $0 [-chroot=<root>] [-user=<username>] [-l|-login]
|
|
[-i|-initramfs] [-d|-debug] <profilename>
|
|
|
|
-h, -help Display this help.
|
|
-chroot=<root> Chroot into <root> to apply profile settings, requires a
|
|
username to be specified, see below.
|
|
-user=<username> The user where a profile is to be applied, requires the
|
|
script to be run as root. If no username is given, it
|
|
is assumed that you wish to apply profile settings for
|
|
the current user.
|
|
-l, -login Apply some of the selected profile settings to the
|
|
login manager. Currently this handle gdm and lightdm.
|
|
This requires root privileges.
|
|
-i, -initramfs Indicate that the script is being called from the
|
|
initramfs. Allows the script to assume some values
|
|
that can not otherwise be easily determined in an
|
|
initramfs environment. Requires that a chroot dir and
|
|
user name are specified. See above.
|
|
-dconf Create a dconf key file that will be loaded into the
|
|
user's dconf database. This works around the dconf
|
|
service not running in a chroot.
|
|
-d|-debug Enable debugging output.
|
|
<profilename> The name of the profile you wish to apply, see below.
|
|
|
|
The profiles currently available are as follows:
|
|
high-contrast For users with lesser visual impairments who only need a high
|
|
contrast theme, mouse cursor and icons.
|
|
magnifier For users with moderate visual impairments who require a screen
|
|
magnifier.
|
|
blindness Users who are partially or completely blind who require a screen
|
|
reader.
|
|
braille Users who are partially or completely blind who require a screen
|
|
reader and wish to use a Braille display.
|
|
keyboard-modifiers
|
|
Users who have minor motor impairments who require slight
|
|
changes to the way their keyboard behaves.
|
|
onscreen-keyboard
|
|
Users with motor impairments who require the use of an
|
|
on-screen keyboard.
|
|
EOF
|
|
}
|
|
|
|
gset()
|
|
{
|
|
local schema="$1"
|
|
local key="$2"
|
|
shift 2
|
|
local value="$@"
|
|
|
|
if [ -n "$GLIBBIN_VERSION" ]; then
|
|
if [ -n "$DCONF" ]; then
|
|
case "$schema" in
|
|
*:*)
|
|
local schema_path=$(echo $schema | cut -f2 -d:)
|
|
break
|
|
;;
|
|
*)
|
|
local schema_path=$(echo "$schema" | sed -e 's@\.@/@g')
|
|
break
|
|
;;
|
|
esac
|
|
|
|
echo "[$schema_path]" >> $CHROOT_DIR//tmp/casper-a11y-dconf-user.d/00-user
|
|
echo "${key}=${value}" >> $CHROOT_DIR//tmp/casper-a11y-dconf-user.d/00-user
|
|
echo >> $CHROOT_DIR/tmp/casper-a11y-dconf-user.d/00-user
|
|
else
|
|
$DO_CHROOT $DO_SUDO gsettings set "$@"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
gset_lightdm()
|
|
{
|
|
local schema="$1"
|
|
local key="$2"
|
|
shift 2
|
|
local value="$@"
|
|
|
|
if [ -n "$GLIBBIN_VERSION" ]; then
|
|
if [ -n "$DCONF" ]; then
|
|
case "$schema" in
|
|
*:*)
|
|
local schema_path=$(echo $schema | cut -f2 -d:)
|
|
break
|
|
;;
|
|
*)
|
|
local schema_path=$(echo "$schema" | sed -e 's@\.@/@g')
|
|
break
|
|
;;
|
|
esac
|
|
|
|
echo "[$schema_path]" >> $CHROOT_DIR//tmp/casper-a11y-dconf-lightdm.d/00-lightdm
|
|
echo "${key}=${value}" >> $CHROOT_DIR//tmp/casper-a11y-dconf-lightdm.d/00-lightdm
|
|
echo >> $CHROOT_DIR/tmp/casper-a11y-dconf-lightdm.d/00-lightdm
|
|
else
|
|
$DO_CHROOT sudo -u lightdm gsettings set "$@"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
gset_gdm()
|
|
{
|
|
local schema="$1"
|
|
local key="$2"
|
|
shift 2
|
|
local value="$@"
|
|
|
|
if [ -n "$GLIBBIN_VERSION" ]; then
|
|
if [ -n "$DCONF" ]; then
|
|
case "$schema" in
|
|
*:*)
|
|
local schema_path=$(echo $schema | cut -f2 -d:)
|
|
break
|
|
;;
|
|
*)
|
|
local schema_path=$(echo "$schema" | sed -e 's@\.@/@g')
|
|
break
|
|
;;
|
|
esac
|
|
|
|
echo "[$schema_path]" >> $CHROOT_DIR//tmp/casper-a11y-dconf-gdm.d/00-gdm
|
|
echo "${key}=${value}" >> $CHROOT_DIR//tmp/casper-a11y-dconf-gdm.d/00-gdm
|
|
echo >> $CHROOT_DIR/tmp/casper-a11y-dconf-gdm.d/00-gdm
|
|
else
|
|
$DO_CHROOT sudo -u gdm gsettings set "$@"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
kderc_addtoprefixes()
|
|
{
|
|
if [ -e $CHROOT_DIR/etc/kde4rc ]; then
|
|
sed -i "s|\\(prefixes=/usr/share/kubuntu-default-settings/kde-profile/default/\\)|\\1,$1|" $CHROOT_DIR/etc/kde4rc
|
|
fi
|
|
}
|
|
|
|
# Unfortunately this bloats this script somewhat, but orca doesn't seem to want
|
|
# to deal with individual settings/a small config fragment.
|
|
# Arguments: $1 = speech/magnifier/braille (which
|
|
# accessibility feature to turn on)
|
|
set_orca_config()
|
|
{
|
|
# Yes, we could use $HOME, but enquiring about $HOME is not easy when
|
|
# Outside the target environment, particularly when running from the
|
|
# initramfs, and this script is not everything for everybody anyway.
|
|
if [ -n "$ORCA_VERSION" ] && ! [ -f "$CHROOT_DIR/home/$USER_NAME/.local/share/orca/user-settings.conf" ]; then
|
|
mkdir -p "$CHROOT_DIR/home/$USER_NAME/.local/share/orca"
|
|
|
|
cat <<EOF > "$CHROOT_DIR/home/$USER_NAME/.local/share/orca/user-settings.conf"
|
|
{
|
|
"pronunciations": {},
|
|
"keybindings": {},
|
|
"profiles": {
|
|
"default": {
|
|
"profile": [
|
|
"Default",
|
|
"default"
|
|
],
|
|
"pronunciations": {},
|
|
"keybindings": {}
|
|
}
|
|
},
|
|
"general": {
|
|
"speakCellHeaders": true,
|
|
"magEdgeMargin": 0,
|
|
"brailleContractionTable": "",
|
|
"magPointerFollowsFocus": false,
|
|
"magTextTrackingMode": 2,
|
|
"magZoomerBorderSize": 1,
|
|
"brailleAlignmentStyle": 0,
|
|
"enableEchoByWord": false,
|
|
"enableMagZoomerColorInversion": false,
|
|
"magCursorSize": 32,
|
|
"magSmoothingMode": 0,
|
|
"magZoomerLeft": 840,
|
|
"showMainWindow": true,
|
|
"sayAllStyle": 1,
|
|
"brailleSelectorIndicator": 192,
|
|
"presentDateFormat": "%x",
|
|
"magContrastLevel": 0,
|
|
"magMouseTrackingMode": 0,
|
|
"speakCellSpan": true,
|
|
"progressBarUpdateInterval": 10,
|
|
"speakCellCoordinates": true,
|
|
"enablePauseBreaks": true,
|
|
"brailleEOLIndicator": " $l",
|
|
"verbalizePunctuationStyle": 1,
|
|
"progressBarVerbosity": 1,
|
|
"enableSpeech": false,
|
|
"enableBraille": false,
|
|
"chatAnnounceBuddyTyping": false,
|
|
"speakMultiCaseStringsAsWords": false,
|
|
"enableBrailleGrouping": false,
|
|
"readTableCellRow": true,
|
|
"speechServerFactory": "speechdispatcherfactory",
|
|
"textAttributesBrailleIndicator": 0,
|
|
"enableMagCursorExplicitSize": false,
|
|
"messageVerbosityLevel": 1,
|
|
"enableMagLiveUpdating": true,
|
|
"enableSpeechIndentation": false,
|
|
"enableKeyEcho": true,
|
|
"magHideCursor": false,
|
|
"magZoomerBorderColor": "#000000",
|
|
"magPointerFollowsZoomer": true,
|
|
"mouseDwellDelay": 0,
|
|
"magBrightnessLevelRed": 0,
|
|
"enableMagnifier": false,
|
|
"magZoomFactor": 4.0,
|
|
"activeProfile": [
|
|
"Default",
|
|
"default"
|
|
],
|
|
"enableMagZoomerBorder": false,
|
|
"flashVerbosityLevel": 1,
|
|
"enableFlashMessages": true,
|
|
"speechServerInfo": null,
|
|
"presentToolTips": false,
|
|
"flashIsPersistent": false,
|
|
"skipBlankCells": false,
|
|
"firstStart": false,
|
|
"largeObjectTextLength": 75,
|
|
"enableEchoBySentence": false,
|
|
"magContrastLevelBlue": 0,
|
|
"magContrastLevelRed": 0,
|
|
"enableContractedBraille": false,
|
|
"orcaModifierKeys": [
|
|
"Insert",
|
|
"KP_Insert"
|
|
],
|
|
"enableMagCursor": true,
|
|
"speechRequiredStateString": "required",
|
|
"quitOrcaNoConfirmation": false,
|
|
"brailleRequiredStateString": "required",
|
|
"magCursorColor": "#000000",
|
|
"enablePositionSpeaking": false,
|
|
"magZoomerType": 0,
|
|
"onlySpeakDisplayedText": false,
|
|
"enableProgressBarUpdates": true,
|
|
"wrappedStructuralNavigation": true,
|
|
"chatRoomHistories": false,
|
|
"brailleVerbosityLevel": 1,
|
|
"enableFunctionKeys": true,
|
|
"enableModifierKeys": true,
|
|
"magCrossHairColor": "#000000",
|
|
"enableTutorialMessages": false,
|
|
"enableActionKeys": true,
|
|
"speakBlankLines": true,
|
|
"magColorFilteringMode": 0,
|
|
"magZoomerRight": 1680,
|
|
"keyboardLayout": 1,
|
|
"magTargetDisplay": "",
|
|
"disableBrailleEOL": false,
|
|
"magZoomerTop": 0,
|
|
"magSourceDisplay": "",
|
|
"enableDiacriticalKeys": false,
|
|
"enableMnemonicSpeaking": false,
|
|
"enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; strikethrough:false; justification:left; style:normal; text-spelling:none;",
|
|
"speechVerbosityLevel": 1,
|
|
"enableMagCrossHair": true,
|
|
"enableBrailleMonitor": false,
|
|
"voices": {
|
|
"default": {
|
|
"established": false
|
|
},
|
|
"uppercase": {
|
|
"average-pitch": 5.6
|
|
},
|
|
"system": {
|
|
"established": false
|
|
},
|
|
"hyperlink": {
|
|
"established": false
|
|
}
|
|
},
|
|
"magContrastLevelGreen": 0,
|
|
"brailleFlashTime": 5000,
|
|
"magCrossHairSize": 16,
|
|
"enableMouseReview": false,
|
|
"enableNavigationKeys": false,
|
|
"magBrightnessLevelGreen": 0,
|
|
"chatSpeakRoomName": false,
|
|
"startingProfile": [
|
|
"Default",
|
|
"default"
|
|
],
|
|
"enableLockingKeys": true,
|
|
"profile": [
|
|
"Default",
|
|
"default"
|
|
],
|
|
"brailleRolenameStyle": 1,
|
|
"brailleLinkIndicator": 192,
|
|
"enableEchoByCharacter": false,
|
|
"magBrightnessLevelBlue": 0,
|
|
"enableBrailleContext": true,
|
|
"magControlTrackingMode": 2,
|
|
"magZoomerBottom": 1050,
|
|
"enablePrintableKeys": true,
|
|
"enabledSpokenTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; strikethrough:false; justification:left; style:normal; paragraph-style:; text-spelling:none;",
|
|
"chatMessageVerbosity": 0,
|
|
"presentTimeFormat": "%X",
|
|
"magBrightnessLevel": 0,
|
|
"presentRequiredState": false,
|
|
"enableMagCrossHairClip": false
|
|
}
|
|
}
|
|
EOF
|
|
|
|
case "$1" in
|
|
speech)
|
|
sed -i -e 's/\"enableSpeech\": false/\"enableSpeech\": true/' "$CHROOT_DIR/home/$USER_NAME/.local/share/orca/user-settings.conf"
|
|
;;
|
|
braille)
|
|
sed -i -e 's/\"enableBraille\": false/\"enableBraille\": true/' "$CHROOT_DIR/home/$USER_NAME/.local/share/orca/user-settings.conf"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
if [ "$HOME" = "/root" ] || [ -n "$IN_INITRAMFS" ]; then
|
|
chmod 755 "$CHROOT_DIR/home/$USER_NAME/.local/share/orca"
|
|
$DO_CHROOT chown $USER_NAME.$USER_NAME -R "/home/$USER_NAME/.local"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
create_conf()
|
|
{
|
|
cat <<EOF > $CHROOT_DIR/tmp/casper-a11y.conf
|
|
UBIQUITY_A11Y_PROFILE=$1
|
|
EOF
|
|
}
|
|
|
|
if [ "$#" = "0" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
while [ "$#" -gt 0 ];
|
|
do
|
|
case "$1" in
|
|
-chroot=*)
|
|
CHROOT_DIR="${1#-chroot=}"
|
|
DO_CHROOT="chroot $CHROOT_DIR"
|
|
shift
|
|
continue
|
|
;;
|
|
-user=*)
|
|
USER_NAME="${1#-user=}"
|
|
DO_SUDO="sudo -u $USER_NAME"
|
|
shift
|
|
continue
|
|
;;
|
|
-l|-login)
|
|
SET_LOGIN=1
|
|
shift
|
|
continue
|
|
;;
|
|
-i|-initramfs)
|
|
IN_INITRAMFS=1
|
|
shift
|
|
continue
|
|
;;
|
|
-d|-debug)
|
|
set -x
|
|
shift
|
|
continue
|
|
;;
|
|
-dconf)
|
|
DCONF=1
|
|
shift
|
|
continue
|
|
;;
|
|
*)
|
|
PROFILE_NAME="$1"
|
|
shift
|
|
continue
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "$IN_INITRAMFS" ] && [ -z "$CHROOT_DIR" ]; then
|
|
echo "Error: In initramfs, but no chroot directory specified."
|
|
help
|
|
exit 1
|
|
elif [ -n "$IN_INITRAMFS" ] && [ -z "$USER_NAME" ]; then
|
|
echo "Error: In initramfs, but no username specified."
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$SET_LOGIN" ] && [ "$HOME" != "/root" ] && [ -z "$IN_INITRAMFS" ]; then
|
|
echo "Error: Setting up accessibility for login requires root privileges."
|
|
help
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "$CHROOT_DIR" ] || [ -n "$USER_NAME" ]; then
|
|
if [ "$HOME" != "/root" ] && [ -z "$IN_INITRAMFS" ]; then
|
|
echo "Error: You are not running as root."
|
|
help
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$CHROOT_DIR" ]; then
|
|
if [ ! -d "$CHROOT_DIR" ]; then
|
|
echo "Error: Target chroot directory does not exist, or you do not have permission to access it."
|
|
exit 1
|
|
fi
|
|
if [ -z "$IN_INITRAMFS" ] && ! type chroot >/dev/null 2>&1 ; then
|
|
echo "Error: Chroot command not available in running environment."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -n "$DCONF" ]; then
|
|
if [ -z "$USER_NAME" ]; then
|
|
echo "Error: You have requested to write to a user's dconf database, but no user was specified."
|
|
exit 1
|
|
fi
|
|
if [ "$HOME" != "/root" ] && [ -z "$IN_INITRAMFS" ]; then
|
|
echo "Error: You have requested to write to a user's dconf database, but you do not have root"
|
|
echo "privileges."
|
|
exit 1
|
|
fi
|
|
if [ -z "$CHROOT_DIR" ]; then
|
|
echo "Error: You have requested to write to a user's dconf database, but you did not specify"
|
|
echo "a target directory to chroot to."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# If no username was entered on the command line, grab the name of the current
|
|
# user, so we can write files to their home directory.
|
|
if [ -z "$USER_NAME" ]; then
|
|
if [ -z "$USER" ]; then
|
|
USER_NAME="${HOME#/home/}"
|
|
else
|
|
USER_NAME="$USER"
|
|
fi
|
|
fi
|
|
|
|
# Check to see if a few necessary packages are present in the target
|
|
# environment.
|
|
GLIBBIN_VERSION=$($DO_CHROOT /usr/bin/dpkg-query -W --showformat='${Version}' libglib2.0-bin 2>/dev/null) || GLIBBIN_VERSION=""
|
|
ORCA_VERSION=$($DO_CHROOT /usr/bin/dpkg-query -W --showformat='${Version}' gnome-orca 2>/dev/null) || ORCA_VERSION=""
|
|
DCONFCLI_VERSION=$($DO_CHROOT /usr/bin/dpkg-query -W --showformat='${Version}' dconf-cli 2>/dev/null) || DCONFCLI_VERSION=""
|
|
|
|
if [ -z "$DCONFCLI_VERSION" ]; then
|
|
unset DCONF
|
|
fi
|
|
|
|
if [ -n "$DCONF" ]; then
|
|
rm -r -f $CHROOT_DIR/tmp/casper-a11y-dconf-user.d
|
|
mkdir -p $CHROOT_DIR/tmp/casper-a11y-dconf-user.d
|
|
touch $CHROOT_DIR/tmp/casper-a11y-dconf-user.d/00-user
|
|
|
|
if [ -n "$SET_LOGIN" ]; then
|
|
if [ -d $CHROOT_DIR/etc/lightdm ]; then
|
|
rm -r -f $CHROOT_DIR/tmp/casper-a11y-dconf-lightdm
|
|
mkdir -p $CHROOT_DIR/tmp/casper-a11y-dconf-lightdm.d
|
|
touch $CHROOT_DIR/tmp/casper-a11y-dconf-lightdm.d/00-lightdm
|
|
fi
|
|
|
|
if [ -d $CHROOT_DIR/etc/gdm3 ]; then
|
|
rm -r -f $CHROOT_DIR/tmp/casper-a11y-dconf-gdm
|
|
mkdir -p $CHROOT_DIR/tmp/casper-a11y-dconf-gdm.d
|
|
touch $CHROOT_DIR/tmp/casper-a11y-dconf-gdm.d/00-gdm
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
case $PROFILE_NAME in
|
|
high-contrast)
|
|
set_common_lowvis
|
|
set_high_contrast
|
|
create_conf $PROFILE_NAME
|
|
;;
|
|
magnifier)
|
|
set_common_lowvis
|
|
set_magnifier
|
|
create_conf $PROFILE_NAME
|
|
;;
|
|
blindness)
|
|
set_common_lowvis
|
|
set_blindness
|
|
create_conf screen-reader
|
|
;;
|
|
braille)
|
|
set_common_lowvis
|
|
set_braille
|
|
create_conf $PROFILE_NAME
|
|
;;
|
|
keyboard-modifiers)
|
|
set_common_motor
|
|
set_keyboard_modifiers
|
|
create_conf $PROFILE_NAME
|
|
;;
|
|
onscreen-keyboard)
|
|
set_common_motor
|
|
set_onscreen_keyboard
|
|
create_conf $PROFILE_NAME
|
|
;;
|
|
esac
|
|
|
|
if [ -n "$DCONF" ]; then
|
|
if [ -d $CHROOT_DIR/tmp/casper-a11y-dconf-user.d ]; then
|
|
mkdir -p $CHROOT_DIR/home/$USER_NAME/.config/dconf
|
|
$DO_CHROOT dconf compile /tmp/$USER_NAME.dconf /tmp/casper-a11y-dconf-user.d
|
|
mv $CHROOT_DIR/tmp/$USER_NAME.dconf $CHROOT_DIR/home/$USER_NAME/.config/dconf/user
|
|
$DO_CHROOT chown $USER_NAME.$USER_NAME -R "/home/$USER_NAME/.config"
|
|
|
|
if [ -d $CHROOT_DIR/tmp/casper-a11y-dconf-lightdm.d ]; then
|
|
mkdir -p $CHROOT_DIR/var/lib/lightdm/.config/dconf
|
|
$DO_CHROOT dconf compile /tmp/lightdm.dconf /tmp/casper-a11y-dconf-lightdm.d
|
|
mv $CHROOT_DIR/tmp/lightdm.dconf $CHROOT_DIR/var/lib/lightdm/.config/dconf/user
|
|
$DO_CHROOT chown lightdm.lightdm -R "/var/lib/lightdm/.config"
|
|
fi
|
|
if [ -d $CHROOT_DIR/tmp/casper-a11y-dconf-gdm.d ]; then
|
|
mkdir -p $CHROOT_DIR/var/lib/gdm3/.config/dconf
|
|
$DO_CHROOT dconf compile /tmp/gdm.dconf /tmp/casper-a11y-dconf-gdm.d
|
|
mv $CHROOT_DIR/tmp/gdm.dconf $CHROOT_DIR/var/lib/gdm3/.config/dconf/user
|
|
$DO_CHROOT chown gdm.gdm -R "/var/lib/gdm3/.config"
|
|
fi
|
|
fi
|
|
fi
|