Add tools to build v86 images from docker container
This commit is contained in:
parent
28ac891dc3
commit
8da18d339e
57
docker/debian-full/Dockerfile
Normal file
57
docker/debian-full/Dockerfile
Normal file
|
@ -0,0 +1,57 @@
|
|||
FROM i386/debian
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get --yes --no-install-recommends install \
|
||||
linux-image-4.9.0-6-686 grub2 systemd \
|
||||
libterm-readline-perl-perl \
|
||||
unzip bzip2 xz-utils \
|
||||
fluxbox \
|
||||
xserver-xorg-input-kbd xserver-xorg-input-mouse xserver-xorg-input-evdev \
|
||||
xserver-xorg-video-fbdev xserver-xorg-video-vesa \
|
||||
xserver-xorg x11-xserver-utils xinit dbus-x11 \
|
||||
libgdk-pixbuf2.0 libpango-1.0 libpangocairo-1.0 libgtk2.0-bin \
|
||||
libc-l10n locales \
|
||||
fonts-noto fonts-droid-fallback \
|
||||
strace file xterm vim apt-file \
|
||||
winbind cabextract \
|
||||
dhcpcd5 \
|
||||
wget curl \
|
||||
&& \
|
||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
|
||||
locale-gen \
|
||||
chsh -s /bin/bash && \
|
||||
echo "root:root" | chpasswd && \
|
||||
mkdir -p /etc/systemd/system/serial-getty@ttyS0.service.d/ && \
|
||||
systemctl enable serial-getty@ttyS0.service && \
|
||||
rm /lib/systemd/system/getty.target.wants/getty-static.service && \
|
||||
rm /etc/motd /etc/issue && \
|
||||
systemctl disable winbind.service && \
|
||||
systemctl disable systemd-timesyncd.service && \
|
||||
systemctl disable apt-daily.timer && \
|
||||
systemctl disable apt-daily-upgrade.timer && \
|
||||
echo "tmpfs /tmp tmpfs nodev,nosuid 0 0" >> /etc/fstab
|
||||
|
||||
COPY getty-noclear.conf getty-override.conf /etc/systemd/system/getty@tty1.service.d/
|
||||
COPY getty-autologin-serial.conf /etc/systemd/system/serial-getty@ttyS0.service.d/
|
||||
|
||||
COPY logind.conf /etc/systemd/logind.conf
|
||||
|
||||
#COPY xinitrc /root/.xinitrc
|
||||
COPY xorg.conf /etc/X11/
|
||||
COPY fluxbox /root/.fluxbox
|
||||
|
||||
COPY boot-9p /etc/initramfs-tools/scripts/boot-9p
|
||||
|
||||
# this needs to be commented out in order to boot from hdd
|
||||
RUN printf '%s\n' 9p 9pnet 9pnet_virtio virtio virtio_ring virtio_pci | tee -a /etc/initramfs-tools/modules && \
|
||||
echo 'BOOT=boot-9p' | tee -a /etc/initramfs-tools/initramfs.conf && \
|
||||
update-initramfs -u
|
||||
|
||||
RUN apt-get --yes clean && \
|
||||
rm -r /var/lib/apt/lists/* && \
|
||||
rm -r /usr/share/doc/* && \
|
||||
rm -r /usr/share/man/* && \
|
||||
rm -r /usr/share/locale/?? && \
|
||||
rm /var/log/*.log /var/log/lastlog /var/log/wtmp /var/log/apt/*.log /var/log/apt/*.xz
|
33
docker/debian-full/boot-9p
Normal file
33
docker/debian-full/boot-9p
Normal file
|
@ -0,0 +1,33 @@
|
|||
# 9p filesystem mounting -*- shell-script -*-
|
||||
|
||||
mountroot()
|
||||
{
|
||||
wait_for_udev 10
|
||||
|
||||
if [ ${readonly} = y ]; then
|
||||
roflag="-o ro"
|
||||
else
|
||||
roflag="-o rw"
|
||||
fi
|
||||
|
||||
#echo "Running: mount -t 9p -o cache=mmap ${ROOT} ${rootmnt}"
|
||||
#mount -t 9p -o cache=mmap ${ROOT} ${rootmnt}
|
||||
echo "Running: mount -t 9p -o cache=fscache ${ROOT} ${rootmnt}"
|
||||
mount -t 9p -o cache=fscache ${ROOT} ${rootmnt}
|
||||
echo "mount finished with code $?"
|
||||
}
|
||||
|
||||
mount_top()
|
||||
{
|
||||
echo top
|
||||
}
|
||||
|
||||
mount_premount()
|
||||
{
|
||||
echo premount
|
||||
}
|
||||
|
||||
mount_bottom()
|
||||
{
|
||||
echo bottom
|
||||
}
|
6
docker/debian-full/build-container.sh
Executable file
6
docker/debian-full/build-container.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
docker build . --rm --tag i386/debian-full
|
||||
docker rm debian-full || true
|
||||
docker create -t -i --name debian-full i386/debian-full bash
|
97
docker/debian-full/build-state.js
Executable file
97
docker/debian-full/build-state.js
Executable file
|
@ -0,0 +1,97 @@
|
|||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
|
||||
const path = require("path");
|
||||
|
||||
// TODO:
|
||||
// - Timeout
|
||||
|
||||
console.log("Don't forget to run make build/libv86.js before running this script");
|
||||
|
||||
var fs = require("fs");
|
||||
var V86 = require("./../../build/libv86.js").V86;
|
||||
|
||||
const V86_ROOT = path.join(__dirname, "../..");
|
||||
|
||||
var OUTPUT_FILE = path.join(V86_ROOT, "images/debian-state-base.bin");
|
||||
var SCREEN_FILE = "/tmp/screen_debian_full.txt";
|
||||
|
||||
process.stdin.setRawMode(true);
|
||||
process.stdin.resume();
|
||||
process.stdin.setEncoding("utf8");
|
||||
|
||||
var emulator = new V86({
|
||||
bios: { url: path.join(V86_ROOT, "/bios/seabios.bin") },
|
||||
vga_bios: { url: path.join(V86_ROOT, "/bios/vgabios.bin") },
|
||||
hda: { url: path.join(V86_ROOT, "/images/debian-9p-boot.img"), async: true, },
|
||||
autostart: true,
|
||||
memory_size: 512 * 1024 * 1024,
|
||||
vga_memory_size: 8 * 1024 * 1024,
|
||||
network_relay_url: "<UNUSED>",
|
||||
filesystem: {
|
||||
basefs: {
|
||||
url: path.join(V86_ROOT, "/images/debian-base-fs.json"),
|
||||
},
|
||||
baseurl: path.join(V86_ROOT, "/images/debian-9p-rootfs-flat/"),
|
||||
//baseurl: path.join(V86_ROOT, "/images/debian-9p-rootfs/"),
|
||||
},
|
||||
screen_dummy: true,
|
||||
});
|
||||
|
||||
console.log("Now booting, please stand by ...");
|
||||
|
||||
var boot_start = Date.now();
|
||||
var serial_text = "";
|
||||
|
||||
process.stdin.on("data", function(c)
|
||||
{
|
||||
if(c === "\u0003")
|
||||
{
|
||||
// ctrl c
|
||||
process.exit();
|
||||
}
|
||||
else
|
||||
{
|
||||
emulator.serial0_send(c);
|
||||
}
|
||||
});
|
||||
|
||||
emulator.add_listener("serial0-output-char", function(c)
|
||||
{
|
||||
process.stdout.write(c);
|
||||
|
||||
serial_text += c;
|
||||
|
||||
if(serial_text.endsWith("root@localhost:~# "))
|
||||
{
|
||||
console.error("\nBooted in %d", (Date.now() - boot_start) / 1000);
|
||||
|
||||
// wait a few seconds as the serial console finishes faster than the screen terminal
|
||||
|
||||
setTimeout(function ()
|
||||
{
|
||||
emulator.save_state(function(err, s)
|
||||
{
|
||||
if(err)
|
||||
{
|
||||
throw err;
|
||||
}
|
||||
|
||||
fs.writeFile(OUTPUT_FILE, new Uint8Array(s), function(e)
|
||||
{
|
||||
if(e) throw e;
|
||||
console.error("Saved as " + OUTPUT_FILE);
|
||||
emulator.stop();
|
||||
});
|
||||
});
|
||||
}, 5000);
|
||||
}
|
||||
});
|
||||
|
||||
//function save_screen()
|
||||
//{
|
||||
// var screen = emulator.screen_adapter.get_text_screen();
|
||||
// fs.writeFile(SCREEN_FILE, screen.join("\n"), function(e) { if(e) throw e; });
|
||||
//}
|
||||
//
|
||||
//setInterval(save_screen, 1000);
|
95
docker/debian-full/create-9p-from-container.sh
Executable file
95
docker/debian-full/create-9p-from-container.sh
Executable file
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/env bash
|
||||
set -veu
|
||||
|
||||
if [ $(id -u) != "0" ]
|
||||
then
|
||||
echo "Please run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUTFILE=$(dirname "$0")/../../images/debian-9p-boot.img
|
||||
OUT_ROOTFS=$(dirname "$0")/../../images/debian-9p-rootfs
|
||||
OUT_ROOTFS_FLAT=$(dirname "$0")/../../images/debian-9p-rootfs-flat
|
||||
OUT_FSJSON=$(dirname "$0")/../../images/debian-base-fs.json
|
||||
CONTAINER_NAME=debian-full
|
||||
|
||||
# vmlinuz, initrd.img and grub take about 25M as of time of this writing, be on
|
||||
# the safe side with 64M
|
||||
dd if=/dev/zero of=$OUTFILE bs=1k count=64k
|
||||
|
||||
(
|
||||
echo o # Create a new empty DOS partition table
|
||||
echo n # Add a new partition
|
||||
echo p # Primary partition
|
||||
echo 1 # Partition number
|
||||
echo 2048 # First sector
|
||||
echo # Last sector (Accept default: varies)
|
||||
echo a # make bootable
|
||||
echo w # Write changes
|
||||
echo q # quit
|
||||
) | fdisk $OUTFILE
|
||||
|
||||
# 1048576 is 2048 (first sector) * 512 (sector size)
|
||||
mkfs.ext4 -F -E offset=1048576 $OUTFILE
|
||||
|
||||
KPARTX_OUTPUT=$(kpartx -a -v $OUTFILE)
|
||||
echo $KPARTX_OUTPUT
|
||||
LOOP_PARTITION=$(echo $KPARTX_OUTPUT | grep -o 'loop[0-9]\+p[0-9]\+')
|
||||
LOOP_DEV=$(echo $LOOP_PARTITION | grep -o 'loop[0-9]\+')
|
||||
echo $LOOP_PARTITION
|
||||
echo $LOOP_DEV
|
||||
|
||||
function finish_kpartx {
|
||||
kpartx -d $OUTFILE
|
||||
}
|
||||
trap finish_kpartx EXIT
|
||||
|
||||
ls -lah /dev/mapper/$LOOP_PARTITION
|
||||
mount /dev/mapper/$LOOP_PARTITION /mnt
|
||||
function finish_mount {
|
||||
umount /mnt
|
||||
finish_kpartx
|
||||
}
|
||||
trap finish_mount EXIT
|
||||
|
||||
rm -rf $OUT_ROOTFS/ && mkdir $OUT_ROOTFS/
|
||||
docker export $CONTAINER_NAME | tar -xvC $OUT_ROOTFS/
|
||||
|
||||
$(dirname "$0")/../../tools/fs2json.py --out $OUT_FSJSON $OUT_ROOTFS/
|
||||
chmod 644 $OUT_FSJSON
|
||||
|
||||
# Note: Not deleting old files here
|
||||
$(dirname "$0")/../../tools/copy-to-sha256.py $OUT_ROOTFS $OUT_ROOTFS_FLAT
|
||||
|
||||
#find $OUT_ROOTFS/ -type d -exec chmod 755 {} ";"
|
||||
#find $OUT_ROOTFS/ -type f -exec chmod 644 {} ";"
|
||||
|
||||
cp -r -av $OUT_ROOTFS/boot/ /mnt/boot/
|
||||
cp -av $OUT_ROOTFS/{initrd*,vmlinuz*} /mnt/
|
||||
|
||||
|
||||
grub-install --recheck --target=i386-pc --locales= --themes= --fonts= --root-directory /mnt/ /dev/$LOOP_DEV
|
||||
|
||||
cat > /mnt/boot/grub/grub.cfg << 'EOF'
|
||||
set root='hd0' # XXX: I believe this has no significance, but is required to exist by grub
|
||||
|
||||
set timeout_style=menu
|
||||
set timeout=0
|
||||
|
||||
menuentry 'Linux' {
|
||||
#insmod ext2
|
||||
#insmod gzio
|
||||
#insmod fat
|
||||
set root='hd0,msdos1'
|
||||
|
||||
echo 'Loading Linux linux ...'
|
||||
#linux /vmlinuz rw root=/dev/sda1 rootfstype=ext4 init=/bin/systemd
|
||||
linux /vmlinuz rw init=/bin/systemd root=host9p console=ttyS0
|
||||
#linux /boot/vmlinuz debug verbose rw root=/dev/sda1 rootfstype=ext4
|
||||
|
||||
echo 'Loading initial ramdisk ...'
|
||||
initrd /initrd.img
|
||||
}
|
||||
EOF
|
||||
|
||||
echo $OUTFILE created.
|
4
docker/debian-full/fluxbox/apps
Normal file
4
docker/debian-full/fluxbox/apps
Normal file
|
@ -0,0 +1,4 @@
|
|||
[app] (name=fbrun)
|
||||
[Position] (WINCENTER) {0 0}
|
||||
[Layer] {2}
|
||||
[end]
|
82
docker/debian-full/fluxbox/init
Normal file
82
docker/debian-full/fluxbox/init
Normal file
|
@ -0,0 +1,82 @@
|
|||
! If you're looking for settings to configure, they won't be saved here until
|
||||
! you change something in the fluxbox configuration menu.
|
||||
|
||||
session.menuFile: ~/.fluxbox/menu
|
||||
session.keyFile: ~/.fluxbox/keys
|
||||
session.styleFile: ~/.fluxbox/styles/Clearlooks
|
||||
session.screen0.rootCommand: fbsetroot -solid black
|
||||
|
||||
|
||||
session.screen0.slit.layer: Dock
|
||||
session.screen0.slit.onhead: 0
|
||||
session.screen0.slit.acceptKdeDockapps: true
|
||||
session.screen0.slit.autoHide: false
|
||||
session.screen0.slit.placement: RightBottom
|
||||
session.screen0.slit.alpha: 255
|
||||
session.screen0.slit.maxOver: false
|
||||
session.screen0.window.focus.alpha: 255
|
||||
session.screen0.window.unfocus.alpha: 255
|
||||
session.screen0.tabs.usePixmap: true
|
||||
session.screen0.tabs.maxOver: false
|
||||
session.screen0.tabs.intitlebar: true
|
||||
session.screen0.titlebar.left: Stick
|
||||
session.screen0.titlebar.right: Minimize Maximize Close
|
||||
session.screen0.iconbar.usePixmap: true
|
||||
session.screen0.iconbar.mode: {static groups} (workspace)
|
||||
session.screen0.iconbar.alignment: Relative
|
||||
session.screen0.iconbar.iconWidth: 128
|
||||
session.screen0.iconbar.iconTextPadding: 10
|
||||
session.screen0.clientMenu.usePixmap: true
|
||||
session.screen0.menu.alpha: 255
|
||||
session.screen0.toolbar.placement: BottomCenter
|
||||
session.screen0.toolbar.layer: Dock
|
||||
session.screen0.toolbar.autoHide: false
|
||||
session.screen0.toolbar.visible: false
|
||||
session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, iconbar, systemtray, clock
|
||||
session.screen0.toolbar.onhead: 1
|
||||
session.screen0.toolbar.widthPercent: 100
|
||||
session.screen0.toolbar.maxOver: false
|
||||
session.screen0.toolbar.height: 0
|
||||
session.screen0.toolbar.alpha: 255
|
||||
session.screen0.tab.placement: TopLeft
|
||||
session.screen0.tab.width: 64
|
||||
session.screen0.tabFocusModel: ClickToTabFocus
|
||||
session.screen0.autoRaise: true
|
||||
session.screen0.maxDisableMove: false
|
||||
session.screen0.edgeSnapThreshold: 10
|
||||
session.screen0.tooltipDelay: 500
|
||||
session.screen0.colPlacementDirection: TopToBottom
|
||||
session.screen0.opaqueMove: true
|
||||
session.screen0.windowPlacement: RowMinOverlapPlacement
|
||||
session.screen0.focusNewWindows: true
|
||||
session.screen0.clickRaises: true
|
||||
session.screen0.maxDisableResize: false
|
||||
session.screen0.allowRemoteActions: false
|
||||
session.screen0.windowMenu: /root/.fluxbox/windowmenu
|
||||
session.screen0.fullMaximization: false
|
||||
session.screen0.defaultDeco: NORMAL
|
||||
session.screen0.noFocusWhileTypingDelay: 0
|
||||
session.screen0.menuDelay: 200
|
||||
session.screen0.workspacewarping: true
|
||||
session.screen0.focusSameHead: false
|
||||
session.screen0.workspaceNames: Workspace 1,Workspace 2,Workspace 3,Workspace 4,
|
||||
session.screen0.workspaces: 4
|
||||
session.screen0.maxIgnoreIncrement: true
|
||||
session.screen0.showwindowposition: false
|
||||
session.screen0.focusModel: ClickFocus
|
||||
session.screen0.rowPlacementDirection: LeftToRight
|
||||
session.screen0.strftimeFormat: %k:%M
|
||||
session.doubleClickInterval: 250
|
||||
session.slitlistFile: /root/.fluxbox/slitlist
|
||||
session.cacheLife: 5
|
||||
session.tabPadding: 0
|
||||
session.cacheMax: 200
|
||||
session.appsFile: /root/.fluxbox/apps
|
||||
session.ignoreBorder: false
|
||||
session.styleOverlay: /root/.fluxbox/overlay
|
||||
session.forcePseudoTransparency: false
|
||||
session.tabsAttachArea: Window
|
||||
session.autoRaiseDelay: 250
|
||||
session.configVersion: 13
|
||||
session.colorsPerChannel: 4
|
||||
session.menuSearch: itemstart
|
137
docker/debian-full/fluxbox/keys
Normal file
137
docker/debian-full/fluxbox/keys
Normal file
|
@ -0,0 +1,137 @@
|
|||
# click on the desktop to get menus
|
||||
OnDesktop Mouse1 :HideMenus
|
||||
OnDesktop Mouse2 :WorkspaceMenu
|
||||
OnDesktop Mouse3 :RootMenu
|
||||
|
||||
# scroll on the desktop to change workspaces
|
||||
OnDesktop Mouse4 :PrevWorkspace
|
||||
OnDesktop Mouse5 :NextWorkspace
|
||||
|
||||
# scroll on the toolbar to change current window
|
||||
OnToolbar Mouse4 :PrevWindow {static groups} (iconhidden=no)
|
||||
OnToolbar Mouse5 :NextWindow {static groups} (iconhidden=no)
|
||||
|
||||
# alt + left/right click to move/resize a window
|
||||
OnWindow Mod1 Mouse1 :MacroCmd {Raise} {Focus} {StartMoving}
|
||||
OnWindowBorder Move1 :StartMoving
|
||||
|
||||
OnWindow Mod1 Mouse3 :MacroCmd {Raise} {Focus} {StartResizing NearestCorner}
|
||||
OnLeftGrip Move1 :StartResizing bottomleft
|
||||
OnRightGrip Move1 :StartResizing bottomright
|
||||
|
||||
# alt + middle click to lower the window
|
||||
OnWindow Mod1 Mouse2 :Lower
|
||||
|
||||
# control-click a window's titlebar and drag to attach windows
|
||||
OnTitlebar Control Mouse1 :StartTabbing
|
||||
|
||||
# double click on the titlebar to shade
|
||||
OnTitlebar Double Mouse1 :Shade
|
||||
|
||||
# left click on the titlebar to move the window
|
||||
OnTitlebar Mouse1 :MacroCmd {Raise} {Focus} {ActivateTab}
|
||||
OnTitlebar Move1 :StartMoving
|
||||
|
||||
# middle click on the titlebar to lower
|
||||
OnTitlebar Mouse2 :Lower
|
||||
|
||||
# right click on the titlebar for a menu of options
|
||||
OnTitlebar Mouse3 :WindowMenu
|
||||
|
||||
# alt-tab
|
||||
Mod1 Tab :NextWindow {groups} (workspace=[current])
|
||||
Mod1 Shift Tab :PrevWindow {groups} (workspace=[current])
|
||||
|
||||
# cycle through tabs in the current window
|
||||
Mod4 Tab :NextTab
|
||||
Mod4 Shift Tab :PrevTab
|
||||
|
||||
# go to a specific tab in the current window
|
||||
Mod4 1 :Tab 1
|
||||
Mod4 2 :Tab 2
|
||||
Mod4 3 :Tab 3
|
||||
Mod4 4 :Tab 4
|
||||
Mod4 5 :Tab 5
|
||||
Mod4 6 :Tab 6
|
||||
Mod4 7 :Tab 7
|
||||
Mod4 8 :Tab 8
|
||||
Mod4 9 :Tab 9
|
||||
|
||||
# open a terminal
|
||||
Mod1 F1 :Exec xterm
|
||||
|
||||
# open a dialog to run programs
|
||||
Mod1 F2 :Exec fbrun
|
||||
|
||||
# volume settings, using common keycodes
|
||||
# if these don't work, use xev to find out your real keycodes
|
||||
176 :Exec amixer sset Master,0 1+
|
||||
174 :Exec amixer sset Master,0 1-
|
||||
160 :Exec amixer sset Master,0 toggle
|
||||
|
||||
# current window commands
|
||||
Mod1 F4 :Close
|
||||
Mod1 F5 :Kill
|
||||
Mod1 F9 :Minimize
|
||||
Mod1 F10 :Maximize
|
||||
Mod1 F11 :Fullscreen
|
||||
|
||||
# open the window menu
|
||||
Mod1 space :WindowMenu
|
||||
|
||||
# exit fluxbox
|
||||
Control Mod1 Delete :Exit
|
||||
|
||||
# change to previous/next workspace
|
||||
Control Mod1 Left :PrevWorkspace
|
||||
Control Mod1 Right :NextWorkspace
|
||||
|
||||
# send the current window to previous/next workspace
|
||||
Mod4 Left :SendToPrevWorkspace
|
||||
Mod4 Right :SendToNextWorkspace
|
||||
|
||||
# send the current window and follow it to previous/next workspace
|
||||
Control Mod4 Left :TakeToPrevWorkspace
|
||||
Control Mod4 Right :TakeToNextWorkspace
|
||||
|
||||
# change to a specific workspace
|
||||
Control F1 :Workspace 1
|
||||
Control F2 :Workspace 2
|
||||
Control F3 :Workspace 3
|
||||
Control F4 :Workspace 4
|
||||
Control F5 :Workspace 5
|
||||
Control F6 :Workspace 6
|
||||
Control F7 :Workspace 7
|
||||
Control F8 :Workspace 8
|
||||
Control F9 :Workspace 9
|
||||
Control F10 :Workspace 10
|
||||
Control F11 :Workspace 11
|
||||
Control F12 :Workspace 12
|
||||
|
||||
# send the current window to a specific workspace
|
||||
Mod4 F1 :SendToWorkspace 1
|
||||
Mod4 F2 :SendToWorkspace 2
|
||||
Mod4 F3 :SendToWorkspace 3
|
||||
Mod4 F4 :SendToWorkspace 4
|
||||
Mod4 F5 :SendToWorkspace 5
|
||||
Mod4 F6 :SendToWorkspace 6
|
||||
Mod4 F7 :SendToWorkspace 7
|
||||
Mod4 F8 :SendToWorkspace 8
|
||||
Mod4 F9 :SendToWorkspace 9
|
||||
Mod4 F10 :SendToWorkspace 10
|
||||
Mod4 F11 :SendToWorkspace 11
|
||||
Mod4 F12 :SendToWorkspace 12
|
||||
|
||||
# send the current window and change to a specific workspace
|
||||
Control Mod4 F1 :TakeToWorkspace 1
|
||||
Control Mod4 F2 :TakeToWorkspace 2
|
||||
Control Mod4 F3 :TakeToWorkspace 3
|
||||
Control Mod4 F4 :TakeToWorkspace 4
|
||||
Control Mod4 F5 :TakeToWorkspace 5
|
||||
Control Mod4 F6 :TakeToWorkspace 6
|
||||
Control Mod4 F7 :TakeToWorkspace 7
|
||||
Control Mod4 F8 :TakeToWorkspace 8
|
||||
Control Mod4 F9 :TakeToWorkspace 9
|
||||
Control Mod4 F10 :TakeToWorkspace 10
|
||||
Control Mod4 F11 :TakeToWorkspace 11
|
||||
Control Mod4 F12 :TakeToWorkspace 12
|
0
docker/debian-full/fluxbox/lastwallpaper
Normal file
0
docker/debian-full/fluxbox/lastwallpaper
Normal file
61
docker/debian-full/fluxbox/menu
Normal file
61
docker/debian-full/fluxbox/menu
Normal file
|
@ -0,0 +1,61 @@
|
|||
# Generated by fluxbox-generate_menu
|
||||
#
|
||||
# If you read this it means you want to edit this file manually, so here
|
||||
# are some useful tips:
|
||||
#
|
||||
# - You can add your own menu-entries to ~/.fluxbox/usermenu
|
||||
#
|
||||
# - If you miss apps please let me know and I will add them for the next
|
||||
# release.
|
||||
#
|
||||
# - The -r option prevents removing of empty menu entries and lines which
|
||||
# makes things much more readable.
|
||||
#
|
||||
# - To prevent any other app from overwriting your menu
|
||||
# you can change the menu name in ~/.fluxbox/init to:
|
||||
# session.menuFile: ~/.fluxbox/my-menu
|
||||
[begin] (Fluxbox)
|
||||
[encoding] {UTF-8}
|
||||
[exec] (xterm) {xterm}
|
||||
[exec] (firefox) {} execname is NULL; cannot lookup
|
||||
[exec] (Run) {fbrun}
|
||||
[submenu] (Terminals)
|
||||
[exec] (xterm) {xterm}
|
||||
[end]
|
||||
[submenu] (Editors)
|
||||
[exec] (vim) {xterm -e vim}
|
||||
[exec] (vi) {xterm -e vi}
|
||||
[end]
|
||||
[submenu] (Multimedia)
|
||||
[submenu] (X-utils)
|
||||
[exec] (Reload .Xdefaults) {xrdb -load $HOME/.Xdefaults}
|
||||
[end]
|
||||
[end]
|
||||
[submenu] (Office)
|
||||
[exec] (Open Office) {soffice}
|
||||
[end]
|
||||
[submenu] (System Tools)
|
||||
[exec] (top) {xterm -e top}
|
||||
[end]
|
||||
[submenu] (Fluxbox menu)
|
||||
[config] (Configure)
|
||||
[submenu] (System Styles) {Choose a style...}
|
||||
[stylesdir] (/usr/share/fluxbox/styles)
|
||||
[end]
|
||||
[submenu] (User Styles) {Choose a style...}
|
||||
[stylesdir] (~/.fluxbox/styles)
|
||||
[end]
|
||||
[workspaces] (Workspace List)
|
||||
[submenu] (Tools)
|
||||
[exec] (Run) {fbrun}
|
||||
[exec] (Regen Menu) {fluxbox-generate_menu}
|
||||
[end]
|
||||
[commanddialog] (Fluxbox Command)
|
||||
[reconfig] (Reload config)
|
||||
[restart] (Restart)
|
||||
[exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
|
||||
[separator]
|
||||
[exit] (Exit)
|
||||
[end]
|
||||
[endencoding]
|
||||
[end]
|
2
docker/debian-full/fluxbox/overlay
Normal file
2
docker/debian-full/fluxbox/overlay
Normal file
|
@ -0,0 +1,2 @@
|
|||
! The following line will prevent styles from setting the background.
|
||||
background: none
|
|
@ -0,0 +1,32 @@
|
|||
/* XPM */
|
||||
static char * bullet_active_xpm[] = {
|
||||
"6 10 19 1",
|
||||
" c None",
|
||||
". c #CEDEF2",
|
||||
"+ c #CFDFF2",
|
||||
"@ c #CEDEF1",
|
||||
"# c #FFFFFF",
|
||||
"$ c #CDDDF1",
|
||||
"% c #CDDDF2",
|
||||
"& c #CFDEF2",
|
||||
"* c #F7FAFD",
|
||||
"= c #CCDCF1",
|
||||
"- c #F7F9FD",
|
||||
"; c #C9DAEF",
|
||||
"> c #CBDBEF",
|
||||
", c #C8D9EF",
|
||||
"' c #C6D8EE",
|
||||
") c #C7D8EE",
|
||||
"! c #C6D7ED",
|
||||
"~ c #C5D7ED",
|
||||
"{ c #C5D7EE",
|
||||
".+ ",
|
||||
"@#. ",
|
||||
" $#% ",
|
||||
" &#$ ",
|
||||
" *#=",
|
||||
" -#;",
|
||||
" >#, ",
|
||||
" '#) ",
|
||||
"!#' ",
|
||||
"~{ "};
|
|
@ -0,0 +1,22 @@
|
|||
/* XPM */
|
||||
static char * bullet_xpm[] = {
|
||||
"12 12 7 1",
|
||||
" c None",
|
||||
". c #808080",
|
||||
"+ c #7F7F7F",
|
||||
"@ c #000000",
|
||||
"# c #797979",
|
||||
"$ c #131313",
|
||||
"% c #787878",
|
||||
" ",
|
||||
" .+ ",
|
||||
" .@+ ",
|
||||
" .@+ ",
|
||||
" #@+ ",
|
||||
" $@+ ",
|
||||
" $@+ ",
|
||||
" %@+ ",
|
||||
" .@+ ",
|
||||
" .@+ ",
|
||||
" .+ ",
|
||||
" "};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * close_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##$$##$$##.",
|
||||
".%%$$$$$$%%.",
|
||||
".&&&$$$$&&&.",
|
||||
".***$$$$***.",
|
||||
".==$$$$$$==.",
|
||||
".--$$--$$--.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * close_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@++@@++.",
|
||||
".++@@@@@@++.",
|
||||
".###@@@@###.",
|
||||
".$$$@@@@$$$.",
|
||||
".%%@@@@@@%%.",
|
||||
".&&@@&&@@&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * close_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@++@@++.",
|
||||
".++@@@@@@++.",
|
||||
".+++@@@@+++.",
|
||||
".+++@@@@+++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@++@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * label_focus_xpm[] = {
|
||||
"1 12 13 1",
|
||||
" c None",
|
||||
". c #94B6E0",
|
||||
"+ c #93B5DF",
|
||||
"@ c #91B4DF",
|
||||
"# c #90B3DE",
|
||||
"$ c #8EB1DD",
|
||||
"% c #8BAFDB",
|
||||
"& c #86ABD9",
|
||||
"* c #85AAD8",
|
||||
"= c #84A9D7",
|
||||
"- c #82A8D6",
|
||||
"; c #81A7D5",
|
||||
"> c #80A6D5",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * label_unfocus_xpm[] = {
|
||||
"1 12 13 1",
|
||||
" c None",
|
||||
". c #E8E7E6",
|
||||
"+ c #E7E6E5",
|
||||
"@ c #E6E5E3",
|
||||
"# c #E5E4E2",
|
||||
"$ c #E4E3E1",
|
||||
"% c #E2E1DF",
|
||||
"& c #DEDCDA",
|
||||
"* c #DDDBD9",
|
||||
"= c #DCDAD8",
|
||||
"- c #DBD9D7",
|
||||
"; c #DAD8D6",
|
||||
"> c #D9D7D5",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * maximize_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##$$$$$$##.",
|
||||
".%%$$$$$$%%.",
|
||||
".&&$&&&&$&&.",
|
||||
".**$****$**.",
|
||||
".==$====$==.",
|
||||
".--$$$$$$--.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * maximize_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".##@####@##.",
|
||||
".$$@$$$$@$$.",
|
||||
".%%@%%%%@%%.",
|
||||
".&&@@@@@@&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * maximize_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".++@++++@++.",
|
||||
".++@++++@++.",
|
||||
".++@++++@++.",
|
||||
".++@@@@@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * menu_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".####$$####.",
|
||||
".%%%%$$%%%%.",
|
||||
".&&$$$$$$&&.",
|
||||
".**$$$$$$**.",
|
||||
".====$$====.",
|
||||
".----$$----.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,37 @@
|
|||
/* XPM */
|
||||
static char * menu_hilite_xpm[] = {
|
||||
"1 17 17 1",
|
||||
" c None",
|
||||
". c #4B6E99",
|
||||
"+ c #A6C4E8",
|
||||
"@ c #A4C2E7",
|
||||
"# c #A2C0E6",
|
||||
"$ c #A0BFE5",
|
||||
"% c #9EBDE5",
|
||||
"& c #9CBCE4",
|
||||
"* c #9ABAE3",
|
||||
"= c #96B7E1",
|
||||
"- c #91B3DE",
|
||||
"; c #8FB2DD",
|
||||
"> c #8DB0DC",
|
||||
", c #8BAFDB",
|
||||
"' c #89ADDA",
|
||||
") c #87ACD9",
|
||||
"! c #85AAD8",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">",
|
||||
",",
|
||||
"'",
|
||||
")",
|
||||
"!",
|
||||
"."};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * menu_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++@@++++.",
|
||||
".++++@@++++.",
|
||||
".##@@@@@@##.",
|
||||
".$$@@@@@@$$.",
|
||||
".%%%%@@%%%%.",
|
||||
".&&&&@@&&&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * menu_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++@@++++.",
|
||||
".++++@@++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".++++@@++++.",
|
||||
".++++@@++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * hide_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #9BBAE2",
|
||||
"% c #90B2DE",
|
||||
"& c #86ABD9",
|
||||
"* c #84AAD8",
|
||||
"= c #FFFFFF",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##########.",
|
||||
".$$$$$$$$$$.",
|
||||
".%%%%%%%%%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**======**.",
|
||||
".--======--.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * hide_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #FEFDFD",
|
||||
"# c #F9F8F8",
|
||||
"$ c #FAF9F9",
|
||||
"% c #6D6C6C",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##########.",
|
||||
".$$%%%%%%$$.",
|
||||
".&&%%%%%%&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * hide_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,49 @@
|
|||
/* XPM */
|
||||
static char * selected_active_xpm[] = {
|
||||
"13 13 33 1",
|
||||
" c None",
|
||||
". c #4B6E99",
|
||||
"+ c #C9DAEF",
|
||||
"@ c #BDCDE0",
|
||||
"# c #53585F",
|
||||
"$ c #AEBDCE",
|
||||
"% c #BACADD",
|
||||
"& c #36393C",
|
||||
"* c #1A1A1A",
|
||||
"= c #717A84",
|
||||
"- c #C7D7EC",
|
||||
"; c #414549",
|
||||
"> c #767F8A",
|
||||
", c #A9B7C8",
|
||||
"' c #939EAD",
|
||||
") c #7B8590",
|
||||
"! c #606770",
|
||||
"~ c #C6D7EB",
|
||||
"{ c #373A3D",
|
||||
"] c #1D1D1E",
|
||||
"^ c #909BA9",
|
||||
"/ c #B8C8DB",
|
||||
"( c #222223",
|
||||
"_ c #2E3032",
|
||||
": c #C1D1E5",
|
||||
"< c #292A2C",
|
||||
"[ c #1E1E1F",
|
||||
"} c #484C52",
|
||||
"| c #8D98A6",
|
||||
"1 c #2F3133",
|
||||
"2 c #28292B",
|
||||
"3 c #767F8B",
|
||||
"4 c #B4C2D5",
|
||||
".............",
|
||||
".+++++++++++.",
|
||||
".+++++++@#$+.",
|
||||
".++++++%&*=+.",
|
||||
".+++++-;*>++.",
|
||||
".+,'++)*!+++.",
|
||||
".~{]^/(_:+++.",
|
||||
".+,<[}*|++++.",
|
||||
".++,<*1~++++.",
|
||||
".+++,23+++++.",
|
||||
".++++,4+++++.",
|
||||
".+++++++++++.",
|
||||
"............."};
|
|
@ -0,0 +1,49 @@
|
|||
/* XPM */
|
||||
static char * selected_xpm[] = {
|
||||
"13 13 33 1",
|
||||
" c None",
|
||||
". c #797979",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #EFEFEF",
|
||||
"# c #646464",
|
||||
"$ c #DCDCDC",
|
||||
"% c #ECECEC",
|
||||
"& c #3F3F3F",
|
||||
"* c #1A1A1A",
|
||||
"= c #8C8C8C",
|
||||
"- c #FCFCFC",
|
||||
"; c #4D4D4D",
|
||||
"> c #929292",
|
||||
", c #D5D5D5",
|
||||
"' c #B8B8B8",
|
||||
") c #999999",
|
||||
"! c #767676",
|
||||
"~ c #FBFBFB",
|
||||
"{ c #404040",
|
||||
"] c #1E1E1E",
|
||||
"^ c #B4B4B4",
|
||||
"/ c #E9E9E9",
|
||||
"( c #242424",
|
||||
"_ c #343434",
|
||||
": c #F4F4F4",
|
||||
"< c #2D2D2D",
|
||||
"[ c #1F1F1F",
|
||||
"} c #565656",
|
||||
"| c #B0B0B0",
|
||||
"1 c #353535",
|
||||
"2 c #2C2C2C",
|
||||
"3 c #939393",
|
||||
"4 c #E3E3E3",
|
||||
".............",
|
||||
".+++++++++++.",
|
||||
".+++++++@#$+.",
|
||||
".++++++%&*=+.",
|
||||
".+++++-;*>++.",
|
||||
".+,'++)*!+++.",
|
||||
".~{]^/(_:+++.",
|
||||
".+,<[}*|++++.",
|
||||
".++,<*1~++++.",
|
||||
".+++,23+++++.",
|
||||
".++++,4+++++.",
|
||||
".+++++++++++.",
|
||||
"............."};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * shade_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##$$$$$$##.",
|
||||
".%%$$$$$$%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
".----------.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * shade_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".##########.",
|
||||
".$$$$$$$$$$.",
|
||||
".%%%%%%%%%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * shade_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * shade_toggled_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##$$$$$$##.",
|
||||
".%%$$$$$$%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".***$$$$***.",
|
||||
".====$$====.",
|
||||
".----------.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * shade_toggled_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".##########.",
|
||||
".$$$@@@@$$$.",
|
||||
".%%%%@@%%%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * shade_toggled_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@@@@@++.",
|
||||
".++@@@@@@++.",
|
||||
".++++++++++.",
|
||||
".+++@@@@+++.",
|
||||
".++++@@++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * stick_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #F4F5F6",
|
||||
"% c #9BBAE2",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##$$##$$##.",
|
||||
".%%$$%%$$%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**********.",
|
||||
".==$$==$$==.",
|
||||
".--$$--$$--.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * stick_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@++@@++.",
|
||||
".++@@++@@++.",
|
||||
".##########.",
|
||||
".$$$$$$$$$$.",
|
||||
".%%@@%%@@%%.",
|
||||
".&&@@&&@@&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * stick_pressed_xpm[] = {
|
||||
"12 12 4 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #7AA1D2",
|
||||
"@ c #F4F5F6",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@++@@++.",
|
||||
".++@@++@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++@@++@@++.",
|
||||
".++@@++@@++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
"............"};
|
|
@ -0,0 +1,28 @@
|
|||
/* XPM */
|
||||
static char * stick_toggled_active_xpm[] = {
|
||||
"12 12 13 1",
|
||||
" c None",
|
||||
". c #49678B",
|
||||
"+ c #ADC7E9",
|
||||
"@ c #A7C3E7",
|
||||
"# c #A1BFE5",
|
||||
"$ c #9BBAE2",
|
||||
"% c #F4F5F6",
|
||||
"& c #90B2DE",
|
||||
"* c #86ABD9",
|
||||
"= c #84AAD8",
|
||||
"- c #82A8D6",
|
||||
"; c #7FA6D5",
|
||||
"> c #7CA4D3",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".@@@@@@@@@@.",
|
||||
".##########.",
|
||||
".$$$%%%%$$$.",
|
||||
".&&&%&%%&&&.",
|
||||
".***%%*%***.",
|
||||
".===%%%%===.",
|
||||
".----------.",
|
||||
".;;;;;;;;;;.",
|
||||
".>>>>>>>>>>.",
|
||||
"............"};
|
|
@ -0,0 +1,25 @@
|
|||
/* XPM */
|
||||
static char * stick_toggled_inactive_xpm[] = {
|
||||
"12 12 10 1",
|
||||
" c None",
|
||||
". c #928F8B",
|
||||
"+ c #FFFFFF",
|
||||
"@ c #6D6C6C",
|
||||
"# c #FEFDFD",
|
||||
"$ c #F9F8F8",
|
||||
"% c #FAF9F9",
|
||||
"& c #FBFAFA",
|
||||
"* c #FCFBFB",
|
||||
"= c #FDFDFD",
|
||||
"............",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".++++++++++.",
|
||||
".+++@@@@+++.",
|
||||
".###@#@@###.",
|
||||
".$$$@@$@$$$.",
|
||||
".%%%@@@@%%%.",
|
||||
".&&&&&&&&&&.",
|
||||
".**********.",
|
||||
".==========.",
|
||||
"............"};
|
|
@ -0,0 +1,40 @@
|
|||
/* XPM */
|
||||
static char * title_focus_xpm[] = {
|
||||
"1 18 19 1",
|
||||
" c None",
|
||||
". c #ADD3FF",
|
||||
"+ c #98B9E2",
|
||||
"@ c #96B8E1",
|
||||
"# c #94B6E0",
|
||||
"$ c #93B5DF",
|
||||
"% c #91B4DF",
|
||||
"& c #90B3DE",
|
||||
"* c #8EB1DD",
|
||||
"= c #8BAFDB",
|
||||
"- c #86ABD9",
|
||||
"; c #85AAD8",
|
||||
"> c #84A9D7",
|
||||
", c #82A8D6",
|
||||
"' c #81A7D5",
|
||||
") c #80A6D5",
|
||||
"! c #7EA4D4",
|
||||
"~ c #7DA3D3",
|
||||
"{ c #7A9FCE",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">",
|
||||
",",
|
||||
"'",
|
||||
")",
|
||||
"!",
|
||||
"~",
|
||||
"{"};
|
|
@ -0,0 +1,40 @@
|
|||
/* XPM */
|
||||
static char * title_unfocus_xpm[] = {
|
||||
"1 18 19 1",
|
||||
" c None",
|
||||
". c #FFFFFF",
|
||||
"+ c #EAE9E8",
|
||||
"@ c #E9E8E7",
|
||||
"# c #E8E7E6",
|
||||
"$ c #E7E6E5",
|
||||
"% c #E6E5E3",
|
||||
"& c #E5E4E2",
|
||||
"* c #E4E3E1",
|
||||
"= c #E2E1DF",
|
||||
"- c #DEDCDA",
|
||||
"; c #DDDBD9",
|
||||
"> c #DCDAD8",
|
||||
", c #DBD9D7",
|
||||
"' c #DAD8D6",
|
||||
") c #D9D7D5",
|
||||
"! c #D8D6D4",
|
||||
"~ c #D7D5D3",
|
||||
"{ c #D2D0CE",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">",
|
||||
",",
|
||||
"'",
|
||||
")",
|
||||
"!",
|
||||
"~",
|
||||
"{"};
|
|
@ -0,0 +1,44 @@
|
|||
/* XPM */
|
||||
static char * toolbar_iconbar_focus_xpm[] = {
|
||||
"1 20 21 1",
|
||||
" c None",
|
||||
". c #CCC9C7",
|
||||
"+ c #D1CFCC",
|
||||
"@ c #D6D3D1",
|
||||
"# c #D6D4D2",
|
||||
"$ c #D5D3D1",
|
||||
"% c #D4D2D0",
|
||||
"& c #D3D1CF",
|
||||
"* c #D2D0CE",
|
||||
"= c #D0CECC",
|
||||
"- c #CFCDCB",
|
||||
"; c #CAC8C5",
|
||||
"> c #C9C7C4",
|
||||
", c #C8C6C3",
|
||||
"' c #C7C4C1",
|
||||
") c #C6C3C0",
|
||||
"! c #C4C2BF",
|
||||
"~ c #C3C1BE",
|
||||
"{ c #C2C0BD",
|
||||
"] c #C1BEBB",
|
||||
"^ c #C0BDBA",
|
||||
".",
|
||||
"+",
|
||||
"@",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">",
|
||||
",",
|
||||
"'",
|
||||
")",
|
||||
"!",
|
||||
"~",
|
||||
"{",
|
||||
"]",
|
||||
"^"};
|
|
@ -0,0 +1,38 @@
|
|||
/* XPM */
|
||||
static char * toolbar_iconbar_unfocus_xpm[] = {
|
||||
"1 20 15 1",
|
||||
" c None",
|
||||
". c #FEFEFE",
|
||||
"+ c #FDFDFD",
|
||||
"@ c #FCFCFC",
|
||||
"# c #FBFBFB",
|
||||
"$ c #F5F5F4",
|
||||
"% c #F3F3F2",
|
||||
"& c #F2F2F1",
|
||||
"* c #F1F0EF",
|
||||
"= c #EFEFEE",
|
||||
"- c #EEEDEC",
|
||||
"; c #ECECEB",
|
||||
"> c #EBEAE9",
|
||||
", c #EAE9E8",
|
||||
"' c #E8E7E6",
|
||||
".",
|
||||
".",
|
||||
".",
|
||||
"+",
|
||||
"+",
|
||||
"@",
|
||||
"@",
|
||||
"@",
|
||||
"#",
|
||||
"#",
|
||||
"$",
|
||||
"%",
|
||||
"&",
|
||||
"*",
|
||||
"=",
|
||||
"-",
|
||||
";",
|
||||
">",
|
||||
",",
|
||||
"'"};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * unselected_active_xpm[] = {
|
||||
"13 13 3 1",
|
||||
" c None",
|
||||
". c #4B6E99",
|
||||
"+ c #C9DAEF",
|
||||
".............",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
"............."};
|
|
@ -0,0 +1,19 @@
|
|||
/* XPM */
|
||||
static char * unselected_xpm[] = {
|
||||
"13 13 3 1",
|
||||
" c None",
|
||||
". c #797979",
|
||||
"+ c #FFFFFF",
|
||||
".............",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
".+++++++++++.",
|
||||
"............."};
|
129
docker/debian-full/fluxbox/styles/Clearlooks/theme.cfg
Normal file
129
docker/debian-full/fluxbox/styles/Clearlooks/theme.cfg
Normal file
|
@ -0,0 +1,129 @@
|
|||
! vim: set ft=xdefaults:
|
||||
! Clearlooks theme, port from Openbox
|
||||
! 29.04.2012
|
||||
|
||||
! Menu
|
||||
menu.bevelWidth: 0
|
||||
menu.borderWidth: 1
|
||||
menu.borderColor: #AAAAAA
|
||||
menu.bullet: empty
|
||||
menu.submenu.pixmap: bullet.xpm
|
||||
menu.hilite.submenu.pixmap: bullet-active.xpm
|
||||
menu.selected.pixmap: selected.xpm
|
||||
menu.hilite.selected.pixmap: selected-active.xpm
|
||||
menu.unselected.pixmap: unselected.xpm
|
||||
menu.hilite.unselected.pixmap: unselected-active.xpm
|
||||
menu.bullet.position: right
|
||||
menu.itemHeight: 17
|
||||
menu.title: flat
|
||||
menu.title.justify: Center
|
||||
menu.title.color: #E6E7E6
|
||||
menu.title.textColor: #111111
|
||||
menu.titleHeight: 17
|
||||
menu.frame: flat
|
||||
menu.frame.justify: left
|
||||
menu.frame.color: #FFFFFF
|
||||
menu.frame.textColor: #111111
|
||||
menu.frame.disableColor: #AAAAAA
|
||||
menu.hilite.pixmap: menu-hilite.xpm
|
||||
menu.hilite.textColor: #FFFFFF
|
||||
|
||||
! Window
|
||||
window.bevelWidth: 3
|
||||
window.borderWidth: 1
|
||||
window.borderColor: #585A5D
|
||||
window.title.height: 18
|
||||
window.justify: right
|
||||
window.label.focus: ParentRelative
|
||||
window.label.unfocus: ParentRelative
|
||||
#window.label.focus.pixmap: label-focus.xpm
|
||||
#window.label.unfocus.pixmap: label-unfocus.xpm
|
||||
window.label.focus.textColor: #FFFFFF
|
||||
window.label.unfocus.textColor: #70747D
|
||||
window.title.focus.pixmap: title-focus.xpm
|
||||
window.title.unfocus.pixmap: title-unfocus.xpm
|
||||
window.handleWidth: 0
|
||||
window.handle.focus: flat
|
||||
window.handle.focus.color: #EAEBEC
|
||||
window.handle.unfocus: flat
|
||||
window.handle.unfocus.color: #EAEBEC
|
||||
window.grip.focus: flat
|
||||
window.grip.focus.color: #EAEBEC
|
||||
window.grip.unfocus: flat
|
||||
window.grip.unfocus.color: #EAEBEC
|
||||
window.close.pixmap: close-active.xpm
|
||||
window.close.pressed.pixmap: close-pressed.xpm
|
||||
window.close.unfocus.pixmap: close-inactive.xpm
|
||||
window.iconify.pixmap: minimize-active.xpm
|
||||
window.iconify.pressed.pixmap: minimize-pressed.xpm
|
||||
window.iconify.unfocus.pixmap: minimize-inactive.xpm
|
||||
window.maximize.pixmap: maximize-active.xpm
|
||||
window.maximize.pressed.pixmap: maximize-pressed.xpm
|
||||
window.maximize.unfocus.pixmap: maximize-inactive.xpm
|
||||
window.menuicon.pixmap: menu-active.xpm
|
||||
window.menuicon.pressed.pixmap: menu-pressed.xpm
|
||||
window.menuicon.unfocus.pixmap: menu-inactive.xpm
|
||||
window.shade.pixmap: shade-active.xpm
|
||||
window.shade.unfocus.pixmap: shade-inactive.xpm
|
||||
window.shade.pressed.pixmap: shade-pressed.xpm
|
||||
window.unshade.pixmap: shade-toggled-active.xpm
|
||||
window.unshade.unfocus.pixmap: shade-toggled-inactive.xpm
|
||||
window.unshade.pressed.pixmap: shade-toggled-pressed.xpm
|
||||
window.stick.pixmap: stick-active.xpm
|
||||
window.stick.unfocus.pixmap: stick-inactive.xpm
|
||||
window.stick.pressed.pixmap: stick-pressed.xpm
|
||||
window.stuck.pixmap: stick-toggled-active.xpm
|
||||
window.stuck.unfocus.pixmap: stick-toggled-inactive.xpm
|
||||
|
||||
! Toolbar
|
||||
toolbar.bevelWidth: 1
|
||||
toolbar.borderWidth: 1
|
||||
toolbar.borderColor: #585A5D
|
||||
toolbar.height: 20
|
||||
toolbar: flat
|
||||
toolbar.color: #EAEBEC
|
||||
toolbar.clock: flat
|
||||
toolbar.clock.borderWidth: 0
|
||||
toolbar.clock.borderColor: #A9A5A2
|
||||
toolbar.clock.justify: center
|
||||
toolbar.clock.textColor: #111111
|
||||
toolbar.clock.color: #EDECEB
|
||||
toolbar.systray: flat
|
||||
toolbar.systray.borderWidth: 0
|
||||
toolbar.systray.borderColor: #A9A5A2
|
||||
toolbar.systray.color: #EDECEB
|
||||
toolbar.workspace: flat
|
||||
toolbar.workspace.borderWidth: 0
|
||||
toolbar.workspace.borderColor: #A9A5A2
|
||||
toolbar.workspace.justify: center
|
||||
toolbar.workspace.textColor: #111111
|
||||
toolbar.workspace.color: #EDECEB
|
||||
toolbar.button: flat
|
||||
toolbar.button.borderWidth: 0
|
||||
toolbar.button.borderColor: #A9A5A2
|
||||
toolbar.button.picColor: #111111
|
||||
toolbar.button.color: #EDECEB
|
||||
toolbar.button.pressed.picColor: #111111
|
||||
toolbar.button.pressed.color: #CFCDCB
|
||||
toolbar.iconbar.empty: flat
|
||||
toolbar.iconbar.empty.color: #EDECEB
|
||||
toolbar.iconbar.focused.pixmap: toolbar-iconbar-focus.xpm
|
||||
toolbar.iconbar.focused.borderWidth: 1
|
||||
toolbar.iconbar.focused.borderColor: #A9A5A2
|
||||
toolbar.iconbar.focused.justify: center
|
||||
toolbar.iconbar.focused.textColor: #111111
|
||||
toolbar.iconbar.unfocused.pixmap: toolbar-iconbar-unfocus.xpm
|
||||
toolbar.iconbar.unfocused.borderWidth: 1
|
||||
toolbar.iconbar.unfocused.borderColor: #A9A5A2
|
||||
toolbar.iconbar.unfocused.justify: center
|
||||
toolbar.iconbar.unfocused.textColor: #111111
|
||||
|
||||
! Slit
|
||||
slit: flat
|
||||
slit.bevelWidth: 0
|
||||
slit.borderColor: #585A5D
|
||||
slit.borderWidth: 1
|
||||
slit.color: #EDECEB
|
||||
|
||||
! Font
|
||||
*.font: Sans-8
|
15
docker/debian-full/fluxbox/windowmenu
Normal file
15
docker/debian-full/fluxbox/windowmenu
Normal file
|
@ -0,0 +1,15 @@
|
|||
[begin]
|
||||
[shade]
|
||||
[stick]
|
||||
[maximize]
|
||||
[iconify]
|
||||
[raise]
|
||||
[lower]
|
||||
[settitledialog]
|
||||
[sendto]
|
||||
[layer]
|
||||
[alpha]
|
||||
[extramenus]
|
||||
[separator]
|
||||
[close]
|
||||
[end]
|
3
docker/debian-full/getty-autologin-serial.conf
Normal file
3
docker/debian-full/getty-autologin-serial.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin root --noissue --noclear -s %I 115200,38400,9600 vt102
|
2
docker/debian-full/getty-noclear.conf
Normal file
2
docker/debian-full/getty-noclear.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
[Service]
|
||||
TTYVTDisallocate=no
|
3
docker/debian-full/getty-override.conf
Normal file
3
docker/debian-full/getty-override.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin root --noissue --noclear %I 38400 $TERM
|
37
docker/debian-full/logind.conf
Normal file
37
docker/debian-full/logind.conf
Normal file
|
@ -0,0 +1,37 @@
|
|||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Entries in this file show the compile time defaults.
|
||||
# You can change settings by editing this file.
|
||||
# Defaults can be restored by simply deleting this file.
|
||||
#
|
||||
# See logind.conf(5) for details.
|
||||
|
||||
[Login]
|
||||
NAutoVTs=0
|
||||
ReserveVT=0
|
||||
#KillUserProcesses=no
|
||||
#KillOnlyUsers=
|
||||
#KillExcludeUsers=root
|
||||
#InhibitDelayMaxSec=5
|
||||
#HandlePowerKey=poweroff
|
||||
#HandleSuspendKey=suspend
|
||||
#HandleHibernateKey=hibernate
|
||||
#HandleLidSwitch=suspend
|
||||
#HandleLidSwitchDocked=ignore
|
||||
#PowerKeyIgnoreInhibited=no
|
||||
#SuspendKeyIgnoreInhibited=no
|
||||
#HibernateKeyIgnoreInhibited=no
|
||||
#LidSwitchIgnoreInhibited=yes
|
||||
#HoldoffTimeoutSec=30s
|
||||
#IdleAction=ignore
|
||||
#IdleActionSec=30min
|
||||
#RuntimeDirectorySize=10%
|
||||
#RemoveIPC=yes
|
||||
#InhibitorsMax=8192
|
||||
#SessionsMax=8192
|
||||
#UserTasksMax=33%
|
67
docker/debian-full/xorg.conf
Normal file
67
docker/debian-full/xorg.conf
Normal file
|
@ -0,0 +1,67 @@
|
|||
Section "ServerLayout"
|
||||
Identifier "X.org Configured"
|
||||
Screen 0 "Screen0" 0 0
|
||||
InputDevice "Mouse0" "CorePointer"
|
||||
InputDevice "Keyboard0" "CoreKeyboard"
|
||||
EndSection
|
||||
|
||||
Section "Files"
|
||||
ModulePath "/usr/lib/xorg/modules"
|
||||
FontPath "/usr/share/fonts/misc/"
|
||||
FontPath "/usr/share/fonts/TTF/"
|
||||
#FontPath "/usr/share/fonts/OTF/"
|
||||
#FontPath "/usr/share/fonts/Type1/"
|
||||
FontPath "/usr/share/fonts/100dpi/"
|
||||
FontPath "/usr/share/fonts/75dpi/"
|
||||
EndSection
|
||||
|
||||
Section "Module"
|
||||
Load "glx"
|
||||
EndSection
|
||||
|
||||
Section "InputDevice"
|
||||
Identifier "Keyboard0"
|
||||
Driver "kbd"
|
||||
EndSection
|
||||
|
||||
Section "InputDevice"
|
||||
Identifier "Mouse0"
|
||||
Driver "mouse"
|
||||
Option "Protocol" "auto"
|
||||
Option "Device" "/dev/input/mice"
|
||||
Option "ZAxisMapping" "4 5 6 7"
|
||||
EndSection
|
||||
|
||||
Section "Monitor"
|
||||
Identifier "Monitor0"
|
||||
VendorName "Monitor Vendor"
|
||||
ModelName "Monitor Model"
|
||||
EndSection
|
||||
|
||||
Section "Device"
|
||||
### Available Driver options are:-
|
||||
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
|
||||
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
|
||||
### <percent>: "<f>%"
|
||||
### [arg]: arg optional
|
||||
#Option "ShadowFB" # [<bool>]
|
||||
#Option "Rotate" # <str>
|
||||
#Option "fbdev" # <str>
|
||||
#Option "debug" # [<bool>]
|
||||
Identifier "Card0"
|
||||
Driver "fbdev"
|
||||
#BusID "PCI:0:2:0"
|
||||
Driver "vesa"
|
||||
EndSection
|
||||
|
||||
Section "Screen"
|
||||
Identifier "Screen0"
|
||||
Device "Card0"
|
||||
Monitor "Monitor0"
|
||||
SubSectionSub "Display"
|
||||
#Viewport 0 0
|
||||
Depth 24
|
||||
Modes "1280x1024"
|
||||
EndSubSection
|
||||
EndSection
|
||||
|
60
tools/copy-to-sha256.py
Executable file
60
tools/copy-to-sha256.py
Executable file
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import logging
|
||||
import stat
|
||||
import argparse
|
||||
import hashlib
|
||||
import shutil
|
||||
|
||||
def hash_file(filename):
|
||||
h = hashlib.sha256()
|
||||
with open(filename, "rb", buffering=0) as f:
|
||||
for b in iter(lambda: f.read(128 * 1024), b""):
|
||||
h.update(b)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(format="%(message)s")
|
||||
logger = logging.getLogger("copy")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
args = argparse.ArgumentParser(description="...",
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
args.add_argument("from_path", metavar="from", help="from")
|
||||
args.add_argument("to_path", metavar="to", help="to")
|
||||
|
||||
args = args.parse_args()
|
||||
|
||||
from_path = os.path.normpath(args.from_path)
|
||||
to_path = os.path.normpath(args.to_path)
|
||||
|
||||
def onerror(oserror):
|
||||
logger.warning(oserror)
|
||||
|
||||
files = os.walk(from_path, onerror=onerror)
|
||||
|
||||
for f in files:
|
||||
dirpath, dirnames, filenames = f
|
||||
|
||||
for filename in filenames:
|
||||
absname = os.path.join(dirpath, filename)
|
||||
st = os.lstat(absname)
|
||||
mode = st.st_mode
|
||||
|
||||
assert not stat.S_ISDIR(mode)
|
||||
if stat.S_ISLNK(mode) or stat.S_ISCHR(mode) or stat.S_ISBLK(mode) or stat.S_ISFIFO(mode) or stat.S_ISSOCK(mode):
|
||||
continue
|
||||
|
||||
sha256 = hash_file(absname)
|
||||
to_abs = os.path.join(to_path, sha256)
|
||||
|
||||
if os.path.exists(to_abs):
|
||||
logger.info("Exists, skipped {}".format(to_abs))
|
||||
else:
|
||||
logger.info("cp {} {}".format(absname, to_abs))
|
||||
shutil.copyfile(absname, to_abs)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
170
tools/fs2json.py
Executable file
170
tools/fs2json.py
Executable file
|
@ -0,0 +1,170 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import stat
|
||||
import sys
|
||||
import itertools
|
||||
import logging
|
||||
import hashlib
|
||||
|
||||
VERSION = 3
|
||||
|
||||
IDX_NAME = 0
|
||||
IDX_SIZE = 1
|
||||
IDX_MTIME = 2
|
||||
IDX_MODE = 3
|
||||
IDX_UID = 4
|
||||
IDX_GID = 5
|
||||
|
||||
# target for symbolic links
|
||||
# child nodes for directories
|
||||
# sha256 for files
|
||||
IDX_TARGET = 6
|
||||
IDX_SHA256 = 6
|
||||
|
||||
|
||||
def hash_file(filename):
|
||||
h = hashlib.sha256()
|
||||
with open(filename, "rb", buffering=0) as f:
|
||||
for b in iter(lambda : f.read(128*1024), b""):
|
||||
h.update(b)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def main():
|
||||
logging.basicConfig(format="%(message)s")
|
||||
logger = logging.getLogger("fs2json")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
args = argparse.ArgumentParser(description="Create filesystem JSON. Example:\n"
|
||||
" ./fs2xml.py --exclude /boot/ --out fs.json /mnt/",
|
||||
formatter_class=argparse.RawTextHelpFormatter
|
||||
)
|
||||
args.add_argument("--exclude",
|
||||
action="append",
|
||||
metavar="path",
|
||||
help="Path to exclude (relative to base path). Can be specified multiple times.")
|
||||
args.add_argument("--out",
|
||||
metavar="out",
|
||||
nargs="?",
|
||||
type=argparse.FileType("w"),
|
||||
help="File to write to (defaults to stdout)",
|
||||
default=sys.stdout)
|
||||
args.add_argument("path",
|
||||
metavar="path",
|
||||
help="Base path to include in JSON")
|
||||
|
||||
args = args.parse_args()
|
||||
|
||||
path = os.path.normpath(args.path)
|
||||
path = path + "/"
|
||||
exclude = args.exclude or []
|
||||
exclude = [os.path.join("/", os.path.normpath(p)) for p in exclude]
|
||||
exclude = set(exclude)
|
||||
|
||||
def onerror(oserror):
|
||||
logger.warning(oserror)
|
||||
|
||||
rootdepth = path.count("/")
|
||||
files = os.walk(path, onerror=onerror)
|
||||
prevpath = []
|
||||
|
||||
mainroot = []
|
||||
result = {
|
||||
"fsroot": mainroot,
|
||||
"version": VERSION,
|
||||
"size": 0,
|
||||
}
|
||||
rootstack = [mainroot]
|
||||
|
||||
def make_node(st, name):
|
||||
obj = [None] * 7
|
||||
|
||||
obj[IDX_NAME] = name
|
||||
obj[IDX_SIZE] = st.st_size
|
||||
obj[IDX_MTIME] = int(st.st_mtime)
|
||||
obj[IDX_MODE] = int(st.st_mode)
|
||||
|
||||
obj[IDX_UID] = st.st_uid
|
||||
obj[IDX_GID] = st.st_gid
|
||||
|
||||
result["size"] += st.st_size
|
||||
|
||||
# Missing:
|
||||
# int(st.st_atime),
|
||||
# int(st.st_ctime),
|
||||
|
||||
return obj
|
||||
|
||||
logger.info("Creating file tree ...")
|
||||
|
||||
for f in files:
|
||||
dirpath, dirnames, filenames = f
|
||||
pathparts = dirpath.split("/")
|
||||
pathparts = pathparts[rootdepth:]
|
||||
fullpath = os.path.join("/", *pathparts)
|
||||
|
||||
if fullpath in exclude:
|
||||
dirnames[:] = []
|
||||
continue
|
||||
|
||||
depth = 0
|
||||
for this, prev in zip(pathparts, prevpath):
|
||||
if this != prev:
|
||||
break
|
||||
depth += 1
|
||||
|
||||
for name in prevpath[depth:]:
|
||||
rootstack.pop()
|
||||
|
||||
oldroot = rootstack[-1]
|
||||
|
||||
assert len(pathparts[depth:]) == 1
|
||||
openname = pathparts[-1]
|
||||
|
||||
if openname == "":
|
||||
root = mainroot
|
||||
else:
|
||||
root = []
|
||||
st = os.stat(dirpath)
|
||||
rootobj = make_node(st, openname)
|
||||
rootobj[IDX_TARGET] = root
|
||||
oldroot.append(rootobj)
|
||||
|
||||
rootstack.append(root)
|
||||
|
||||
for filename in itertools.chain(filenames, dirnames):
|
||||
absname = os.path.join(dirpath, filename)
|
||||
|
||||
st = os.lstat(absname)
|
||||
isdir = stat.S_ISDIR(st.st_mode)
|
||||
islink = stat.S_ISLNK(st.st_mode)
|
||||
|
||||
isfile = stat.S_ISREG(st.st_mode)
|
||||
|
||||
if isdir and not islink:
|
||||
continue
|
||||
|
||||
obj = make_node(st, filename)
|
||||
|
||||
if islink:
|
||||
target = os.readlink(absname)
|
||||
obj[IDX_TARGET] = target
|
||||
elif isfile:
|
||||
obj[IDX_SHA256] = hash_file(absname)
|
||||
|
||||
while obj[-1] is None:
|
||||
obj.pop()
|
||||
|
||||
root.append(obj)
|
||||
|
||||
prevpath = pathparts
|
||||
|
||||
logger.info("Creating json ...")
|
||||
|
||||
json.dump(result, args.out, check_circular=False, separators=(',', ':'))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in a new issue