HOWTO Custom Commands
Custom Commands in IGEL OS 12
Custom commands are executed at specific points of the system startup process.
Since multiple profiles with custom commands can overwrite each other, a method for combining custom commands is needed.
Method for Managing Custom Commands
A profile can be setup with a wrapper script to look for custom command scripts. The wrapper script looks for related scripts.
- Use UMS Files to deploy the scripts to IGEL OS
- Create profile for Custom Commands that call the wrapper scripts
Final desktop command:
|  | System --> System Customization --> Custom Commands --> Desktop --> Final desktop command --> /wfs/cc-desktop-3fdc.sh &
 | 
Desktop
| Desktop Execution Times | Description | Basename of Scripts | 
| Desktop initialization | Executed during the boot process, before the X server is started | cc-desktop-1ini- | 
| Before desktop start | The command is executed before the windowmanager and the autostart sessions are started. | cc-desktop-2bds- | 
| Final desktop command | The command is executed after each user logon and desktop restart | cc-desktop-3fdc- | 
- Wrapper - Final desktop command
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | #!/bin/bash
#set -x
#trap read debug
#
# Version: 
# Run all Final Desktop Commands
#
# Custom Commands: Desktop: Final Desktop Command
#
ACTION="cc-desktop-3fdc"
# output to systemlog with ID amd tag
LOGGER="logger -it ${ACTION}"
echo "Starting" | $LOGGER
# run all final desktop scripts
ls /wfs/cc-desktop-3fdc-*.sh | while read LINE
  do
  echo "Starting: ${LINE}" | $LOGGER
  $LINE &
  done
echo "Finished" | $LOGGER
exit 0
 | 
- Add CUPS Network Printers
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | #!/bin/bash
#set -x
#trap read debug
#
# Version:
# Add CUPS network printers
#
# Custom Commands: Desktop: Final Desktop Command
#
ACTION="cc-desktop-3fdc-cupsnetworkprinters"
COUNT=1
# output to systemlog with ID amd tag
LOGGER="logger -it ${ACTION}"
echo "Starting" | $LOGGER
if [ ! -e /usr/lib/cups/backend/snmp ]; then
  echo "ERROR: CUPS not installed. Please install CUPS app" | $LOGGER
fi
# create network printers from /usr/lib/cups/backend/snmp
/usr/lib/cups/backend/snmp | while read LINE
  do
    URI=ipp://`echo "${LINE}" | awk --field-separator " " '{print $2}' | sed -e 's|^.*//||' -e 's|[:/].*||'`/ipp/print
    lpadmin -p wifiprinter${COUNT} -E -v $URI -m everywhere | $LOGGER
    if [ ${COUNT} -eq 1 ]; then
      lpoptions -d wifiprinter${COUNT} | $LOGGER
    fi
    COUNT=$COUNT+1
  done
echo "Finished" | $LOGGER
exit 0
 | 
- Set Permissions on Apache Webdav Folder
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/bin/bash
#set -x
#trap read debug
#
# Version: 
# Set Permissions on /var/www/webdav
#
# Custom Commands: Desktop: Final Desktop Command
#
# set up logging function
ACTION="apache2_set_permissions"
function log {
    logger -it "$ACTION" "$1"
}
log "Starting $ACTION"
chown -R www-data:www-data /services_rw/apache/var/www/webdav
chmod -R 775 /var/www/webdav/* /services_rw/apache/var/www/webdav
log "Ending $ACTION"
 | 
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 | #!/bin/bash
#set -x
#trap read debug
#
# Version: 
# Sort Desktop Icons
#
# Custom Commands: Desktop: Final Desktop Command
#
# set up logging function
ACTION="sort_icons"
function log {
    logger -it "$ACTION" "$1"
}
# function to sort icons
function sort_icons {
    # iterate over each .desktop file in the directory
    for file in "$desktop_dir"/*.desktop; do
        # extract the file name without numeric prefix
        file_name="$(basename $file .desktop | sed 's/^[0-9]*_//')"
        # read the session name from the .desktop file
        session_name="$(grep -Po "(?<=^Name=).*" $file | sed -e 's/ /_/g')"
        # extract the app name from the file name
        app_name="$(echo $file_name | sed 's/_[0-9]*$//')"
        # extract the session ID from the filename
        session_id="$(basename $file .desktop | grep -Po "\d+$")"
        # construct the new filename based on the sorting format
        if [ "$sorting_format" -eq 1 ]; then
            new_filename="${session_name}_${app_name}_${session_id}.desktop"
        elif [ "$sorting_format" -eq 2 ]; then
            new_filename="${app_name}_${session_name}_${session_id}.desktop"
        else
            log "Invalid sorting format specified. Exiting."
            exit 1
        fi
        # check if the filename is already in the correct format
        if [[ ! "$file" =~ "${session_name}" ]]; then
        https://kb.igel.com/en/igel-apps/current/citrix-workspace-app    if [[ "$file" =~ "cwa" ]]; then
                log "Skipping ${file##*/} as cwa shortcuts should not be renamed"
            else
                # rename the .desktop file
                mv "$file" "$desktop_dir/$new_filename"
                log "Renamed ${file##*/} to $new_filename"
            fi
        else
            log "Skipping ${file##*/} as it is already in the correct format"
        fi
    done
}
log "Starting sort_icons script"
# define the directory containing the .desktop files
desktop_dir="/userhome/Desktop"
# specify the sorting format:
# set to 1 for "sessionname_appname_sessionid.desktop"
# set to 2 for "appname_sessionname_sessionid.desktop"
sorting_format=1
# execute the sorting function at the start of the script
sort_icons
# monitor for changes in the directory
while inotifywait -qq -e create -e modify -e delete "$desktop_dir"; do
    # execute the sorting function inside the loop
    sort_icons
done
 | 
- Set Island.io as the default browser
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | #!/bin/bash
#set -x
#trap read debug
#
# Version:
# Set Island.io as the default browser
#
# Custom Commands: Desktop: Final Desktop Command
#
ACTION="cc-desktop-3fdc-island"
# output to systemlog with ID amd tag
LOGGER="logger -it ${ACTION}"
echo "Starting" | $LOGGER
if [ -e /services/island/usr/bin/island-browser-stable ]; then
  echo "APT FOUND: /services/island/usr/bin/island-browser-stable found" | $LOGGER
  xdg-settings set default-web-browser island-browser.desktop
else
  echo "APT NOT FOUND: /services/island/usr/bin/island-browser-stable not found" | $LOGGER
fi
echo "Finished" | $LOGGER
exit 0
 | 
Base
| Base Execution Times | Description | Basename of Scripts | 
| Final initialization command | command is executed during boot, after the initialization | cc-base-4fic- | 
- Wrapper - Final Base initialization command
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | #!/bin/bash
#set -x
#trap read debug
#
# Version: 
# Run all Final Base Initialization Commands
#
# Custom Commands: Base: Final Initialization Command
#
ACTION="cc-base-4fic"
# output to systemlog with ID amd tag
LOGGER="logger -it ${ACTION}"
echo "Starting" | $LOGGER
# run all final desktop scripts
ls /wfs/cc-base-4fic-*.sh | while read LINE
  do
  echo "Starting: ${LINE}" | $LOGGER
  $LINE &
  done
echo "Finished" | $LOGGER
exit 0
 | 
- Link /media/hostname to /media mount point (GParted)
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | #!/bin/bash
#set -x
#trap read debug
# 
# Custom Commands: Base: Final Initialization Command
#
# After using GParted to format rest of desk
#
# Link /media/hostname to /media mount point
# 
ACTION="cc-base-4fic-linkmediadisk"
# output to systemlog with ID amd tag
LOGGER="logger -it ${ACTION}"
MOUNTPOINT=$(mount | grep "/media" | cut -d " " -f 3)
NEWLINK="/media/$(hostname)"
# exit if no media mount point
if [ "${MOUNTPOINT}" == "" ]; then
  echo "No media mount point to link to." | $LOGGER
  exit 0
fi
if [ -L ${NEWLINK} ]; then
  echo "Unlinking ${NEWLINK}" | $LOGGER
  unlink ${NEWLINK} | $LOGGER
elif [  -d ${NEWLINK} ]; then
  echo "${NEWLINK} is a directory. Not linking ${NEWLINK} to ${MOUNTPOINT}" | $LOGGER
  exit 1
fi
ln -svf ${MOUNTPOINT} ${NEWLINK} | $LOGGER
 |