Commit 15997e6c authored by Jonathan Carter's avatar Jonathan Carter
Browse files

Fork aims-desktop metapackage for new release

parent fd3e220f
[Desktop Entry]
Encoding=UTF-8
Name=AIMS Collect Support Data
Comment=Posts system information to a public pastebin
Exec=aims-collect-support-data gui
Icon=aims-collect-support-data
Terminal=false
Type=Application
#!/bin/bash
mkdir -p ~/.aims
LOGFILE=~/.aims/$HOSTNAME
WELCOME="This script will post system information on a public pastebin for support purposes. You will have a chance to review the data before the information is posted. Afterwards, you will receive a link that you can submit to your support department containing the support data."
if [ "$1" = "gui" ]; then
zenity --title "AIMS Desktop Support" --info --text "$WELCOME" --icon-name="aims-starburst" --width=480
fi
if [ "$1" = "menu" ]; then
whiptail --title "AIMS Desktop Support" --msgbox \
"$WELCOME Use the arrow buttons to navigate and ENTER to select." 12 70
fi
echo " * Writing data to $LOGFILE..."
(
echo -e "== Basic System Information ==\n"
echo " * System Time: $(date)"
echo " * Hostname: $HOSTNAME"
echo " * Username: $USER"
echo " * Kernel Version: $(uname -r)"
) > $LOGFILE
echo -e "\n== Memory Information ==\n" >> $LOGFILE
free -h >> $LOGFILE
echo -e "\n== Top Memory Using Processes ==\n" >> $LOGFILE
echo '%Mem Process' >> $LOGFILE
ps ax -o %mem -o comm | tail -n+2 | sort -nr | head >> $LOGFILE
echo -e "\n== Disk Space Usage==\n" >> $LOGFILE
df -h >> $LOGFILE
echo -e "\n== PCI Devices ==\n" >> $LOGFILE
lspci >> $LOGFILE
echo -e "\n== Attached USB Devices ==\n" >> $LOGFILE
lsusb >> $LOGFILE
echo -e "\n== Network Configuration ==\n" >> $LOGFILE
echo "Routing:" >> $LOGFILE
/sbin/route >> $LOGFILE
echo -e "\nInterfaces:" >> $LOGFILE
/sbin/ifconfig >> $LOGFILE
echo -e "\n== APT Status ==\n" >> $LOGFILE
echo -e "Contents of /etc/apt/sources.list.d/:" >> $LOGFILE
ls -1 /etc/apt/sources.list.d >> $LOGFILE
echo -e "\n== CPU Information ==\n" >> $LOGFILE
cat /proc/cpuinfo >> $LOGFILE
if [ "$1" = "menu" ]; then
whiptail --scrolltext --title "AIMS Desktop Support" --textbox $LOGFILE 23 78
whiptail --title "AIMS Desktop Support" --yesno " Submit data to pastebin?" 7 38
if [ "$?" = "1" ]; then
ACTION="abort"
fi
fi
if [ "$1" = "gui" ]; then
zenity --title "AIMS Desktop Support" --text-info --filename=$LOGFILE --ok-label="Submit to Pastebin" --width=480 --height=600
if [ "$?" = "1" ]; then
ACTION="abort"
fi
fi
if [ "$ACTION" = "abort" ]; then
ABORT_TEXT="Support request aborted."
if [ "$1" = "menu" ]; then
whiptail --title "AIMS Desktop Support" --msgbox "$ABORT_TEXT." 10 48
fi
if [ "$1" = "gui" ]; then
zenity --title "AIMS Desktop Support" --info --text "$ABORT_TEXT" --icon-name="aims-starburst"
fi
exit 1
fi
echo " * Sending information to pastebin..."
pastebinurl=$(pastebinit $LOGFILE)
INFOTEXT="Information has been posted to $pastebinurl. Share that URL with your IT centre for further assistance."
if [ "$1" = "menu" ]; then
whiptail --title "AIMS Desktop Support" --msgbox "$INFOTEXT" 10 48
fi
if [ "$1" = "gui" ]; then
zenity --title "AIMS Desktop Support" --info --text "Information has been posted to $pastebinurl. Share that URL with your IT centre for further assistance." --icon-name="aims-starburst" --width=480
fi
echo " * Pastebin URL is $pastebinurl"
#!/bin/bash
# Check we are not in the installer live environment
mount | grep squashfs && \
if [ "$1" != "-f" ];then
echo "You seem to be running aims-complete-install in the live environment,"
echo "add '-f' to continue anyway; else reboot to the new installation."
exit 1
fi
# Make sure locales are generated
locale-gen
# Stop background updates
systemctl stop apt-daily
systemctl stop apt-daily-upgrade
systemctl stop unattended-upgrades
# install software
aims-install-rstudio
apt-get -y install sagemath-jupyter jupyter jupyter-notebook python-notebook spyder3 r-cran-irkernel
apt-get -y dist-upgrade
apt-get clean
# clear Mac OSX boot entries in grub (installer USB looks like a Mac disk and get's added to grub)
update-grub
# Start backround updates again
systemctl start apt-daily
systemctl start apt-daily-upgrade
systemctl start unattended-upgrades
#!/bin/bash
apt-get --no-install-recommends -y install build-essential jupyter-notebook r-recommended libssl-dev libcurl4-openssl-dev libssh2-1-dev
Rscript -e "install.packages(c('repr','IRdisplay','crayon','pbdZMQ','devtools'), repos='https://cran.r-project.org', lib='/usr/local/lib/R/site-library/')"
Rscript -e "devtools::install_github('IRkernel/IRkernel', lib='/usr/local/lib/R/site-library')"
Rscript -e "IRkernel::installspec(user=FALSE)"
#!/bin/bash
echo "Experimental script! Control-c to exit..."
read
rm -rf /usr/local/lib/firefox
wget -cO /tmp/FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-GB"
mkdir -p /usr/local/lib/firefox
tar -xf /tmp/FirefoxSetup.tar.bz2 -C /usr/local/lib/
cp -f /usr/share/applications/firefox-esr.desktop /usr/share/applications/firefox.desktop
sed -i 's/Firefox ESR/Firefox/' /usr/share/applications/firefox.desktop
sed -i 's#Exec=/usr/lib/firefox-esr/firefox-esr %u#Exec=/usr/local/lib/firefox/firefox %u#' /usr/share/applications/firefox.desktop
sed -i 's/StartupWMClass=Firefox-esr/StartupWMClass=Firefox/' /usr/share/applications/firefox.desktop
export VERSION=`su -l nobody -s /bin/bash -c '/usr/local/lib/firefox/firefox --version' 2>/dev/null|cut -d' ' -f3`
sed -i "s/Name=Firefox/Name=Firefox $VERSION/" /usr/share/applications/firefox.desktop
update-desktop-database /usr/share/applications/
update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/local/lib/firefox/firefox 1
update-alternatives --set x-www-browser /usr/local/lib/firefox/firefox
update-alternatives --install /usr/bin/gnome-www-browser gnome-www-browser /usr/local/lib/firefox/firefox 1
update-alternatives --set gnome-www-browser /usr/local/lib/firefox/firefox
[ -L /usr/local/bin/firefox ] || ln -s /usr/local/lib/firefox/firefox /usr/local/bin/firefox
#!/bin/bash
apt-key adv --keyserver hkp://keys.gnupg.net --recv-key CD9C0E09B0C780943A1AD85553F8BD99F40DCB31
echo 'deb http://www.math.uiuc.edu/Macaulay2/Repositories/Debian buster main' >/etc/apt/sources.list.d/macaulay2.list
apt-get -qq update
apt-get -y install macaulay2
pip3 install -t /usr/local/lib/python3.7/ macaulay2-jupyter-kernel
python3 -m m2_kernel.install
#!/bin/bash
echo "deb http://cloud.r-project.org/bin/linux/debian buster-cran40/" > /etc/apt/sources.list.d/cran.list
apt-key adv --keyserver=keys.gnupg.net --recv-key 'E19F5F87128899B192B1A2C2AD5F960A256A04AF'
apt-get -qq update
apt-get -yf install r-base r-base-dev r-recommended
echo "You may want to:"
echo " * sudo apt-get -y autoremove"
echo " * sudo apt-get clean"
echo " * re-install any R packages in ~/.local/lib/R/site-packages or /usr/local/lib/R/site-packages"
#!/bin/bash
echo "* Warning: this will install proprietary software on your computer"
echo "* This is completely unsupported by the AIMS Desktop community"
read -a ANSWER -p "* Please type 'Yes' and press Enter to continue
"
if [ $ANSWER = "Yes" ]; then
systemctl stop apt-daily
systemctl stop apt-daily-upgrade
systemctl stop unattended-upgrades
apt-get -y install aims-restricted-extras
aims-restricted-extras-setup
systemctl start apt-daily
systemctl start apt-daily-upgrade
systemctl start unattended-upgrades
else
echo "Aborting..."
fi
#!/bin/bash
#RSTUDIO=https://download1.rstudio.org/desktop/debian9/x86_64/rstudio-1.2.1335-amd64.deb
#RSTUDIO=https://download1.rstudio.org/desktop/bionic/amd64/rstudio-1.3.959-amd64.deb
RSTUDIO=https://download1.rstudio.org/desktop/bionic/amd64/rstudio-1.4.1103-amd64.deb
gpg --keyserver keys.gnupg.net --recv-keys 3F32EE77E331692F
apt-get -qq update
apt-get -y install r-recommended libedit2 libssl1.1 libclang-dev libobjc-8-dev libobjc4
cd /tmp
wget -c $RSTUDIO
dpkg-sig --verify ${RSTUDIO#https://download1.rstudio.org/desktop/bionic/amd64/} && \
dpkg -i ${RSTUDIO#https://download1.rstudio.org/desktop/bionic/amd64/}
#!/bin/bash
if [ "$(lspci | grep RTL8723DE | wc -l)" = "0" ]; then
echo "No RTL8723DE cards were detected, exiting..."
exit 1
fi
# AIMS Desktop has 4.19 installed by default, however, 5.0 is available from backports
# and you need to check out the correct version
if [ "$(uname -r | cut -b 1)" = "4" ]; then
REVISION="4.15-up"
else
REVISION="5.0-up"
fi
echo "RTL8723DE wifi card has been detected, proceeding with installation..."
sleep 2
cd /usr/src
<<<<<<< HEAD
git clone https://github.com/smlinux/rtl8723de.git -b $REVISION
=======
git clone https://github.com/smlinux/rtl8723de.git -b 4.15-up
>>>>>>> 969c6ac74e1e6620e6eeef535d528501ba1eec08
dkms add ./rtl8723de
dkms install rtl8723de/5.1.1.8_21285.20171026_COEX20170111-1414
depmod -a
echo "Installation complete, please reboot."
#!/bin/bash
curl -s https://updates.signal.org/desktop/apt/keys.asc | apt-key add -
echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" > /etc/apt/sources.list.d/signal-xenial.list
apt-get -qq update
apt-get install signal-desktop
[com.gexperts.Tilix.Settings]
warn-vte-config-issue=false
theme-variant='dark'
terminal-title-show-when-single=false
terminal-title-style='small'
[com.gexperts.Tilix.profiles.2b7c4080-0ddd-46c5-8f23-563fd3ba789d]
background-color='#212121212121'
default-size-columns='132'
default-size-rows='36'
foreground-color='#EFEFEF'
palette=['#000000', '#CC0000', '#4D9A05', '#C3A000', '#3464A3', '#754F7B', '#05979A', '#D3D6CF', '#545652', '#EF2828', '#89E234', '#FBE84F', '#729ECF', '#AC7EA8', '#34E2E2', '#EDEDEB']
scrollback-lines='128,000'
use-theme-colors='false'
visible-name='AIMS Desktop Default'
terminal-bell='icon'
# Desktop defaults
[org.gnome.shell]
enabled-extensions=['dash-to-dock@micxgx.gmail.com', 'disconnect-wifi@kgshank.net', 'Hide_Activities@shay.shayel.org', 'Move_Clock@jonathan.bluemosh.com', 'openweather-extension@jenslody.de', 'refresh-wifi@kgshank.net', 'remove-dropdown-arrows@mpdeimos.com', 'topIcons@kevinboxhoorn.yahoo.com', 'user-theme@gnome-shell-extensions.gcampax.github.com', 'impatience@gfxmonk.net', 'gnome-shell-trash-extension', 'LogOutButton@kyle.aims.ac.za', 'Shortcuts@kyle.aims.ac.za', 'TopIcons@phocean.net', 'alternate-tab@gnome-shell-extensions.gcampax.github.com', 'TilixKeyboardShortcut@jonathan.bluemosh.com', 'drive-menu@gnome-shell-extensions.gcampax.github.com', 'desktop-icons@csoriano']
# Disable extension version verification
disable-extension-version-validation=true
# Launcher icons
favorite-apps=['firefox-esr.desktop', 'chromium.desktop', 'org.gnome.Nautilus.desktop', 'sagemath.desktop', 'jupyter-aims.desktop', 'texstudio.desktop', 'libreoffice-writer.desktop', 'libreoffice-calc.desktop', 'gnome-calculator.desktop', 'com.gexperts.Tilix.desktop', 'gnome-system-monitor.desktop', 'org.gnome.tweaks.desktop', 'gnome-control-center.desktop', 'org.gnome.Software.desktop']
# Gnome shell overrides
[org.gnome.shell.overrides]
attach-modal-dialogs=false
# World Clocks
[org.gnome.clocks]
world-clocks=[{'location': <(uint32 2, <('M\'bour, Senegal', 'GOOY', true, [(0.25714517064273373, -0.30543261909900765)], [(0.25720335991999521, -0.30776942298121035)])>)>}, {'location': <(uint32 2, <('Accra', 'DGAA', true, [(0.097738438111682452, -0.0029088879044213891)], [(0.096865773485685286, -0.0037815525304185538)])>)>}, {'location': <(uint32 2, <('Limbé, Cameroon', 'FKKD', false, [(0.069992747006510883, 0.16069347652208407)], [(0.069813170079773182, 0.16987870804301725)])>)>}, {'location': <(uint32 2, <('Kigali, Rwanda', 'HBBA', true, [(-0.057886759342242765, 0.51167236486076839)], [(-0.058924252862798274, 0.51242866838553514)])>)>}, {'location': <(uint32 2, <('Muizenberg, South Africa', 'FAJS', true, [(-0.4561127053700873, 0.49276461966196816)], [(-0.45727626402251431, 0.49014662578397672)])>)>}]
# AIMS App folder
[org.gnome.desktop.app-folders.folders.AIMS]
translate=true
categories=['X-AIMS']
apps=['aims-collect-support-data.desktop', 'sagemath-aims.desktop', 'jupyter-aims.desktop', 'texmaker.desktop', 'www.octave.org-octave.desktop']
name='X-AIMS.directory'
# Interface options
[org.gnome.desktop.interface]
clock-show-date=true
show-battery-percentage=true
# These notifications can be very noisy on a campus environment
[org.gnome.settings-daemon.plugins.print-notifications]
active=false
# Openweather extension
[org.gnome.shell.extensions.openweather]
city='-34.1027777,18.4652778>Muizenberg, Cape Town Subcouncil 19, Cape Town, City of Cape Town, Western Cape, South Africa >-1'
position-in-panel='right'
pressure-unit='kPa'
days-forecast=4
unit='celsius'
wind-speed-unit='kph'
decimal-places=0
# Calm down tracker
[org.freedesktop.tracker.fts]
max-words-to-index=0
[org.freedesktop.tracker.miner.files]
index-recursive-directories=@as []
enable-monitors=false
index-on-battery=false
sched-idle='always'
ignored-directories=['core-dumps', 'CVS', 'lost+found', 'po']
ignored-files=['*~', '#*#', 'autom4te', '*.aux', 'confdefs.h', 'config.status', 'configure', 'confstat', 'conftest', '*.csproj', '*.desktop', '*.directory', '~$*.doc?', '~$*.dot?', '*.gmo', '*.in', '*.la', 'libtool', '*.lo', '*.loT', 'ltmain.sh', '*.lzo', '*.m4', 'Makefile', '*.nvram', '*.o', '*.omf', '*.orig', '*.part', '*.pc', '*.po', '~$*.pot?', '~$*.ppam', '~$*.ppsm', '~$*.ppsx', '~$*.ppt?', '*.rcore', '*.rej', 'SCCS', '*.tmp', '*.vm*', '*.vmdk', '~$*.vsd?', '~$*.vss?', '~$*.vst?', '~$*.xlam', '~$*.xls?', '~$*.xlt?']
removable-days-threshold=3
index-single-directories=['$HOME', '&DESKTOP', '&DOCUMENTS', '&DOWNLOAD', '&MUSIC', '&PICTURES', '&VIDEOS']
ignored-directories-with-content=['.git', '.trackerignore']
low-disk-space-limit=-1
[org.freedesktop.tracker.extract]
sched-idle='always'
# Show desktop
[org.gnome.desktop.background]
show-desktop-icons=true
[org.gnome.nautilus.desktop]
home-icon-visible=false
trash-icon-visible=false
# Let Right Click be Right Click
# (new upstream default is 'fingers' which makes double-finger touch produce right click)
[org.gnome.desktop.peripherals.touchpad]
click-method='areas'
# Advanced calculator yeah!
[org.gnome.calculator]
button-mode='advanced'
# Classic overrides
[org.gnome.shell.extensions.classic-overrides]
attach-modal-dialogs=false
button-layout="close,minimize,maximize:appmenu"
# Window button layout
[org.gnome.desktop.wm.preferences]
button-layout="close,minimize,maximize:appmenu"
# Show reconnect option for wifi
[org.gnome.shell.extensions.disconnect-wifi]
show-reconnect-always=true
# Thumbnails and space usage
[org.gnome.desktop.applications.thumbnail-cache]
maximum-age=14
# Can also do embedded terminal fonts here?
[org.gnome.gedit.plugins.terminal]
scrollback-lines=1000
[org.gnome.preferences.editor]
auto-indent=true
bracket-matching=true
display-line-numbers=true
highlight-current-line=true
insert-spaces=true
# Nautilus
[org.gnome.nautilus.icon-view]
captions=['size', 'none', 'none']
default-zoom-level='standard'
# locate pointer
[org.gnome.settings-daemon.peripherals.mouse]
locate-pointer=true
# Use sleek in-window appmenus instead
[org.gnome.settings-daemon.plugins.xsettings]
overrides={'Gtk/ShellShowsAppMenu': <0>}
# scan
[org.gnome.SimpleScan]
document-type='text'
[org.gnome.desktop.peripherals.touchpad]
natural-scroll=false
tap-to-click=true
[org.gnome.desktop.peripherals.mouse]
natural-scroll=false
# Do not suspend on AC power
[org.gnome.settings-daemon.plugins.power]
sleep-inactive-battery-type='suspend'
sleep-inactive-ac-type='nothing'
# Dash to Dock extension
[org.gnome.shell.extensions.dash-to-dock]
show-apps-at-top=true
extend-height=true
apply-custom-theme=true
preferred-monitor=0
icon-size-fixed=true
dash-max-icon-size=40
animate-show-apps=false
isolate-workspaces=true
dock-fixed=true
scroll-action='switch-workspace'
[Default Applications]
x-content/audio-player=clementine.desktop;rhythmbox.desktop
application/mxf=vlc.desktop
application/ogg=vlc.desktop
application/ram=vlc.desktop
application/sdp=vlc.desktop
application/smil=vlc.desktop
application/smil+xml=vlc.desktop
application/vnd.ms-wpl=vlc.desktop
application/vnd.rn-realmedia=vlc.desktop
application/x-extension-m4a=vlc.desktop
application/x-extension-mp4=vlc.desktop
application/x-flac=vlc.desktop
application/x-flash-video=vlc.desktop
application/x-matroska=vlc.desktop
application/x-netshow-channel=vlc.desktop
application/x-ogg=vlc.desktop
application/x-quicktime-media-link=vlc.desktop
application/x-quicktimeplayer=vlc.desktop
application/x-shorten=vlc.desktop
application/x-smil=vlc.desktop
application/xspf+xml=vlc.desktop
audio/3gpp=clementine.desktop
audio/ac3=clementine.desktop
audio/AMR=clementine.desktop
audio/AMR-WB=clementine.desktop
audio/basic=clementine.desktop
audio/flac=clementine.desktop
audio/midi=clementine.desktop
audio/mp4=clementine.desktop
audio/mpeg=clementine.desktop
audio/mpegurl=clementine.desktop
audio/ogg=clementine.desktop
audio/prs.sid=clementine.desktop
audio/vnd.rn-realaudio=clementine.desktop
audio/x-ape=clementine.desktop
audio/x-flac=clementine.desktop
audio/x-gsm=clementine.desktop
audio/x-it=clementine.desktop
audio/x-m4a=clementine.desktop
audio/x-matroska=clementine.desktop
audio/x-mod=clementine.desktop
audio/x-mp3=clementine.desktop
audio/x-mpeg=clementine.desktop
audio/x-mpegurl=clementine.desktop
audio/x-ms-asf=clementine.desktop
audio/x-ms-asx=clementine.desktop
audio/x-ms-wax=clementine.desktop
audio/x-ms-wma=clementine.desktop
audio/x-musepack=clementine.desktop
audio/x-pn-aiff=clementine.desktop
audio/x-pn-au=clementine.desktop
audio/x-pn-realaudio=clementine.desktop
audio/x-pn-realaudio-plugin=clementine.desktop
audio/x-pn-wav=clementine.desktop
audio/x-pn-windows-acm=clementine.desktop
audio/x-realaudio=clementine.desktop
audio/x-real-audio=clementine.desktop
audio/x-sbc=clementine.desktop
audio/x-scpls=clementine.desktop
audio/x-speex=clementine.desktop
audio/x-tta=clementine.desktop
audio/x-vorbis=clementine.desktop
audio/x-vorbis+ogg=clementine.desktop
audio/x-wav=clementine.desktop
audio/x-wavpack=clementine.desktop
audio/x-xm=clementine.desktop
image/vnd.rn-realpix=vlc.desktop
image/x-pict=vlc.desktop
misc/ultravox=vlc.desktop
text/calendar=org.gnome.Calendar.desktop
text/google-video-pointer=vlc.desktop
text/x-google-video-pointer=vlc.desktop
text/x-tex=texstudio.desktop
video/3gpp=vlc.desktop
video/dv=vlc.desktop
video/fli=vlc.desktop
video/flv=vlc.desktop
video/mp2t=vlc.desktop
video/mp4=vlc.desktop
video/mp4v-es=vlc.desktop
video/mpeg=vlc.desktop
video/msvideo=vlc.desktop
video/ogg=vlc.desktop
video/quicktime=vlc.desktop
video/vivo=vlc.desktop
video/vnd.divx=vlc.desktop
video/vnd.rn-realvideo=vlc.desktop
video/vnd.vivo=vlc.desktop
video/webm=vlc.desktop
video/x-anim=vlc.desktop
video/x-avi=vlc.desktop
video/x-flc=vlc.desktop
video/x-fli=vlc.desktop
video/x-flic=vlc.desktop
video/x-flv=vlc.desktop
video/x-m4v=vlc.desktop
video/x-matroska=vlc.desktop
video/x-mpeg=vlc.desktop
video/x-ms-asf=vlc.desktop
video/x-ms-asx=vlc.desktop
video/x-msvideo=vlc.desktop
video/x-ms-wm=vlc.desktop
video/x-ms-wmv=vlc.desktop
video/x-ms-wmx=vlc.desktop
video/x-ms-wvx=vlc.desktop
video/x-nsv=vlc.desktop
video/x-ogm+ogg=vlc.desktop
video/x-theora+ogg=vlc.desktop
video/x-totem-stream=vlc.desktop
x-content/video-dvd=vlc.desktop
x-content/video-vcd=vlc.desktop
x-content/video-svcd=vlc.desktop
x-scheme-handler/pnm=vlc.desktop
x-scheme-handler/mms=vlc.desktop
x-scheme-handler/net=vlc.desktop
x-scheme-handler/rtp=vlc.desktop
x-scheme-handler/rtsp=vlc.desktop
x-scheme-handler/mmsh=vlc.desktop
x-scheme-handler/uvox=vlc.desktop
x-scheme-handler/icy=vlc.desktop
x-scheme-handler/icyx=vlc.desktop
x-scheme-handler/mailto=gnome-gmail.desktop
[Added Associations]
text/calendar=org.gnome.Calendar.desktop
! added to allow Univ Stellenbosch Financial System to print locally
XTerm*printerCommand: lpr
! QVTerm keybindings for Univ Stellenbosch Financial System
! "Sentrale Rekenaars"
! To use this pass "-name QVTerm" to xterm
QVTerm*VT100.Translations: #override\
Ctrl <Key> BackSpace: string(0x0B) \n\
Ctrl <Key> Delete: string(0x0C) \n\
Ctrl <Key> Left: string("\033[KC4~") \n\
Ctrl <Key> Right: string("\033[KC6~") \n\
<Key> Page_Up: string("\033Ow")\n\
<Key> Page_Down: string("\033Ox")\n\
<Key> Home: string("\033[1~") \n\
<Key> Insert: string("\033[2~") \n\
<Key> Delete: string("\033[3~") \n\
<Key> End: string("\033[4~") \n\
<Key> Up: string("\033[A") \n\
<Key> Down: string("\033[B") \n\
<Key> Left: string("\033[D") \n\
<Key> Right: string("\033[C") \n\
Meta<Key>A: string("\033a")\n\
Meta<Key>B: string("\033b")\n\
Meta<Key>C: string("\033c")\n\
Meta<Key>D: string("\033d")\n\
Meta<Key>E: string("\033e")\n\
Meta<Key>F: string("\033f")\n\
Meta<Key>G: string("\033g")\n\
Meta<Key>H: string("\033h")\n\
Meta<Key>I: string("\033i")\n\
Meta<Key>J: string("\033j")\n\
Meta<Key>K: string("\033k")\n\
Meta<Key>L: string("\033l")\n\
Meta<Key>M: string("\033m")\n\
Meta<Key>N: string("\033n")\n\
Meta<Key>O: string("\033o")\n\