Pre-Requisites
This article assumes that
- The work is done in the Virtual Box Machine Image created in accordance with the instructions in the blog article to be found at https://blogs.czapski.id.au/2016/10/configure-virtual-box-virtual-machine-and-install-centos-6-8-base-image.
- The user “demo” has sudo access without a password. If this is not the case use the command “su -” and provide the password instead of saying “sudo -i” in the set of commands below
The instructions should work in other RedHat 6-like OS’ and OS versions.
Download alacarte
The alacarte application is a UI for managing the gnome 2 menus. CentOS 6.8, as installed following instructions in the second article in this series, does not include alacarte, so it is necessary to install it. We will do it in two steps – first we will download it and then we will install it form a shared directory. This way we will download it the first time but will subsequently be able to install it on as many images as we care to create without the need to go to the Internet each time.
mkdir -p /media/sf_distros/rpms sudo yum install -y --downloadonly --downloaddir=/media/sf_distros/rpms alacarte ls /media/sf_distros/rpms/alacarte*
/media/sf_distros/rpms/alacarte-0.12.4-1.el6.noarch.rpm
Download gconf-editor
The gconf-editor application is a UI for exploring and modifying gnome configuration. CentOS 6.8, as installed following instructions in the second article in this series, does not include gconf-editor, so it is necessary to install it. We will do it in two steps – first we will download it and then we will install it form a shared directory. This way we will download it the first time but will subsequently be able to install it on as many images as we care to create without the need to go to the Internet each time.
mkdir -p /media/sf_distros/rpms sudo yum install -y --downloadonly --downloaddir=/media/sf_distros/rpms gconf-editor ls /media/sf_distros/rpms/gconf-editor*
/media/sf_distros/rpms/gconf-editor-2.28.0-3.el6.x86_64.rpm
Create localinstall rpm script
Let’s create a script to install a rpm from the shared directory.
cat <<-'EODECK' > /media/sf_distros/scripts/006_install_local_rpm.sh
#!/bin/bash
rpmNamePattern=${1?"Usage: $0 rpmName # please provide rpm name"}
rpmName=$(ls -c1 /media/sf_distros/rpms/${rpmNamePattern}* ) 2>/dev/null
if [ $? -ne 0 ]; then
echo "ERROR: No files satisfying the pattern /media/sf_distros/rpms/${rpmNamePattern}* - can't install ${rpmNamePattern}";
else
if [ "$(yum list ${rpmNamePattern} 2>/dev/null | grep @/${rpmNamePattern})" == "" ]; then
echo "Will install ${rpmName}";
sudo yum -y localinstall ${rpmName}
else
echo "${rpmName} is already installed - skipping installation"
fi
fi
EODECK
chmod ug+x /media/sf_distros/scripts/006_install_local_rpm.sh
Some references:
http://tldp.org/LDP/abs/html/parameter-substitution.html#USAGEMESSAGE
http://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html
Install alacarte and gconf-editor
Install alacarte
/bin/bash -v /media/sf_distros/scripts/006_install_local_rpm.sh alacarte
Install gconf-editor
/bin/bash -v /media/sf_distros/scripts/006_install_local_rpm.sh gconf-editor
Add Launchers to Top Panel
The launchers are gnome-specific text files which define the various aspects of each launcher, and which can either be added to a panel, as is done in this article, or can be placed on the Desktop, which is done in one or more of the subsequent articles.
See “Integrating existing software with GNOME, Guide for Independent Software Vendors”, https://developer.gnome.org/integration-guide/stable/index.html.en, for specifics of the structure of the *.desktop file.
If you worked through the previous article, your top panel will look like in the following illustration.
The launchers for the top panel will go into a specific directory under the user’s home directory, in my case it will be “~/.gnome2/panel2.d/default/launchers/”.
Let’s create a script which adds Alacarte, Gedit, pre-configured gnome-terminal, Nautilus File Manager and KDE Monitor to the top panel.
Note, in the script below, that while we are creating the *.desktop files each time, we are verifying whether the particular launcher has already been added to the panel and are not adding it if it has. This is because each time the gnome-panel-add command is execute a new launcher is added regardless of whether an identical one is already there.
mkdir -p /media/sf_distros/scripts
cat <<-EODECK > /media/sf_distros/scripts/007_add_standard_launchers_to_top_panel.sh
#!/bin/bash
mkdir -p ${HOME}/.gnome2/panel2.d/default/launchers/
cat <<-EOF > ${HOME}/.gnome2/panel2.d/default/launchers/alacarte.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=alacarte
Name=alacarte
Icon=alacarte
EOF
/usr/bin/gconftool-2 --dump /apps/panel/objects | grep alacarte.desktop 2>/dev/null 1>&2
if [ \$? -eq 0 ]; then
echo "Launcher for alacarte already in the top panel";
else
/usr/libexec/gnome-panel-add --panel=top_panel --launcher=${HOME}/.gnome2/panel2.d/default/launchers/alacarte.desktop --position=710
fi
cat <<-EOF > ${HOME}/.gnome2/panel2.d/default/launchers/gedit.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=gedit
Name=gedit
Icon=/usr/share/icons/gnome/scalable/apps/accessories-text-editor.svg
EOF
/usr/bin/gconftool-2 --dump /apps/panel/objects | grep gedit.desktop 2>/dev/null 1>&2
if [ \$? -eq 0 ]; then
echo "Launcher for gedit already in the top panel";
else
/usr/libexec/gnome-panel-add --panel=top_panel --launcher=${HOME}/.gnome2/panel2.d/default/launchers/gedit.desktop --position=280
fi
cat <<-EOF > ${HOME}/.gnome2/panel2.d/default/launchers/gnome-terminal.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=gnome-terminal --geometry 100x24+800+350
Name=gnome-terminal
Icon=/usr/share/icons/gnome/scalable/apps/utilities-terminal.svg
EOF
/usr/bin/gconftool-2 --dump /apps/panel/objects | grep gnome-terminal.desktop 2>/dev/null 1>&2
if [ \$? -eq 0 ]; then
echo "Launcher for gnome-terminal already in the top panel";
else
/usr/libexec/gnome-panel-add --panel=top_panel --launcher=${HOME}/.gnome2/panel2.d/default/launchers/gnome-terminal.desktop --position=290
fi
cat <<-EOF > ${HOME}/.gnome2/panel2.d/default/launchers/file-browser.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=nautilus --no-desktop --browser %U
Name=File Browser
Icon=/usr/share/icons/gnome/scalable/apps/system-file-manager.svg
EOF
/usr/bin/gconftool-2 --dump /apps/panel/objects | grep file-browser.desktop 2>/dev/null 1>&2
if [ \$? -eq 0 ]; then
echo "Launcher for nautilus already in the top panel";
else
/usr/libexec/gnome-panel-add --panel=top_panel --launcher=${HOME}/.gnome2/panel2.d/default/launchers/file-browser.desktop --position=310
fi
cat <<-EOF > ${HOME}/.gnome2/panel2.d/default/launchers/ksystem-monitor.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=ksysguard %U
Name=System Monitor
Icon=/usr/share/icons/gnome/scalable/apps/kde-utilities-system-monitor.svg
EOF
/usr/bin/gconftool-2 --dump /apps/panel/objects | grep ksystem-monitor.desktop 2>/dev/null 1>&2
if [ \$? -eq 0 ]; then
echo "Launcher for KDE Monitor already in the top panel";
else
/usr/libexec/gnome-panel-add --panel=top_panel --launcher=${HOME}/.gnome2/panel2.d/default/launchers/ksystem-monitor.desktop --position=860
fi
EODECK
chmod ug+x /media/sf_distros/scripts/007_add_standard_launchers_to_top_panel.sh
Execute the script to add top panel launchers, and test them.
/bin/bash /media/sf_distros/scripts/007_add_standard_launchers_to_top_panel.sh
The top panel will now have extra tools
Configure the nautilus file browser to show a list view, specific columns and files as well as directories and hidden files.
Examine the default display
nautilus --browser &
Create the configuration script
mkdir -p /media/sf_distros/scripts cat <<-EODECK > /media/sf_distros/scripts/008_configure_nautilus_file_browser.sh gconftool-2 -s -t list --list-type string /apps/nautilus/list_view/default_visible_columns "[name,size,type,date_modified,date_accessed,owner,group,where,permissions,octal_permissions]" gconftool-2 -s -t list --list-type string /apps/nautilus/preferences/default_folder_viewer "[name,size,type,date_modified,owner,group,where,permissions,octal_permissions]" gconftool-2 -s -t string /apps/nautilus/preferences/default_folder_viewer "list_view" gconftool-2 -s -t bool /apps/nautilus/sidebar_panels/tree/show_only_directories "false" gconftool-2 -s -t bool /apps/nautilus/icon_view/default_use_tighter_layout "true" gconftool-2 -s -t bool /apps/nautilus/compact_view/all_columns_have_same_width "false" gconftool-2 --type boolean --set /desktop/gnome/file_views/show_hidden_files "true" EODECK chmod ug+x /media/sf_distros/scripts/008_configure_nautilus_file_browser.sh
Execute the script
/bin/bash -v /media/sf_distros/scripts/008_configure_nautilus_file_browser.sh
Examine the changes
nautilus --browser &
It is expected that the image being configured a bit at a time in this series of articles will be created more than once for different purposes. With this assumptions the individual scripts are appended to a single script so that the second and subsequent images can be configured by a single script rather than having lots of scripts to execute manually.
Append “add launchers to top panel and configure nautilus” script execution commands to the initial bulk configuration script. This script is intended to collect all automated configuration commands and scripts so that they can be all executed in one go on a brand new image if one gets to do this the second and subsequent times.
Don’t actually execute this script while you are building the first image.
cat <<-'EODECK' >> /media/sf_distros/scripts/000_initial_bulk_configuration.sh # install alacarte and gnome-editor /bin/bash -v /media/sf_distros/scripts/006_install_local_rpm.sh alacarte # add launchers to top panel /bin/bash /media/sf_distros/scripts/007_add_standard_launchers_to_top_panel.sh # configure nautilus file browser /bin/bash -v /media/sf_distros/scripts/008_configure_nautilus_file_browser.sh EODECK chmod ug+x /media/sf_distros/scripts/000_initial_bulk_configuration.sh





































