Skip to content

Instantly share code, notes, and snippets.

@scorpp
scorpp / README.md
Created January 1, 2026 16:33
Xerox Phaser 3020 on Linux ARM64

Download and extract Linux drivers that Xerox provides https://www.support.xerox.com/en-us/content/129620 The issue is that their driver is for 32-bit ARM (armhf) and is compiled in weird way.

# enable armhf support
sudo apt install libc6:armhf libstdc++6:armhf patchelf
# patch weird elf
patchelf --set-interpreter /lib/ld-linux-armhf.so.3 uld/arm/rastertospl

# install dep

sudo apt install libcups2t64:armhf libcupsimage2t64:armhf libcupsfilters1t64:armhf

@scorpp
scorpp / README.md
Last active November 11, 2025 10:05

Mikrotik binary backup to text script without knowing password

Given

A binary backup from Mikrotik, either password-less or your know the password for the backup. You restore the backup to device, but cannot login to webFig/SSH/WinBox/etc.

Essence of the method

  1. Spin RouterOS on a VM (choose Cloud Hosted Router https://mikrotik.com/download), login once, set admin password
  2. Reboot into live Linux ISO, backup users db from Mikrotik /rw/store/user.* into /rw/disk/
  3. Reboot into Mikrotik, restore the backup and reboot. You don't have access to Mikroitk any more.
  4. Reboot into live Linux ISO, copy users db you backed up on step #2
@scorpp
scorpp / README.md
Created May 30, 2025 16:46
PlantUML rendering GitHub Action

Rendering PlantUML with GitHub Actions

None of existing GitHub Actions is perfect, most are outdated, others use PlantUML Server, which doesn't work well for private repos.

What's included

  • Flow triggers for *.puml file changes only
  • Uses latest PlantUML docker image (but version could be adjusted)
  • Allows you to customise any aspect of rendering by adjusting CLI args
  • Commits rendered images automatically in a separate commit

That's all was made possible by using nice tj-actions/docker-run action.

@scorpp
scorpp / capture-audio.sh
Created March 16, 2018 11:07
Capture audio from desktop + mic with pulseaudio
#!/bin/bash
#
# Usage:
#
# capture-audio.sh [ffmpeg args]
#
function get_default_sink_or_source() {
SINK_OR_SOURCE=$1
@scorpp
scorpp / rancher-update-service.sh
Created November 11, 2016 17:39
Jenkins script to upgrade a service on Rancher
test -f JSON.sh || curl -O https://raw.githubusercontent.com/dominictarr/JSON.sh/master/JSON.sh
eval $(sed 's/^/MY_/' build.info)
ORIG_LAUNCH_CONFIG=$(cat my-app-service.json | bash ./JSON.sh | grep -F '["launchConfig"]' | sed -e 's/[^{]*//')
NEW_LAUNGH_CONFIG=$(echo $ORIG_LAUNCH_CONFIG |\
sed "s/\(\"imageUuid\"\):\"[^\"]*\"/\1:\"docker:my-image:${MY_BUILD_NUMBER}\"/")
echo $NEW_LAUNGH_CONFIG |\
xargs -d\\n -i_-_ curl -v -u "RANCHER_KEY:RANCHER_SECRET" \
-X POST -H 'Content-Type: application/json' \
-d '{"inServiceStrategy":{"launchConfig": _-_ }}' \
@scorpp
scorpp / docker-pulse-server.sh
Last active July 16, 2019 14:33
Run pulseaudio server in docker container
docker run --rm -ti \
--device=/dev/snd/controlC0 --device=/dev/snd/pcmC0D0p --device=/dev/sndpcmC0D1p --device=/dev/snd/timer \
-p 4713:4713 \
rpi-deb-pulse \
/bin/bash -c "groupadd --gid $(ls -l /dev/snd/controlC0 | cut -d' ' -f4 | xargs getent group | cut -d: -f3) alsadev \
&& gpasswd -a pulse alsadev \
&& pulseaudio --system --high-priority --no-cpu-limit -v \
-L 'module-alsa-sink device=hw:0,0' \
-L 'module-native-protocol-tcp auth-ip-acl=10.2.0.0/24'"
@scorpp
scorpp / proxmox-backup-hook.sh
Last active December 29, 2020 13:40
Hetzner backup hook to mount Hetzner backup space
#!/bin/bash
# vzdump hook script that handles mounting of [Hetzner] backup space
# [over SFTP] and then mounting an FS image stored there.
# After backup is done backup image is remounted to ensure data synced.
# Relies on /etc/fstab entries for backup mount points and pub key auth
# for SFTP.
#
# Corresponding fstab enties:
# uXXXXXX@uXXXXXX.your-backup.de: /mnt/backup-space fuse.sshfs defaults,noauto,allow_root,_netdev 0 0
# /mnt/backup-space/image /mnt/backup ext4 noauto,defaults,loop 0 0
@scorpp
scorpp / skype-toggle.py
Created December 31, 2014 14:19
Skype: show\hide main window
#!/usr/bin/python2
import dbus
import os
remote_bus = dbus.SessionBus()
out_connection = remote_bus.get_object('com.Skype.API', '/com/Skype')
out_connection.Invoke('NAME SkypeToggler')
out_connection.Invoke('PROTOCOL 5')
@scorpp
scorpp / skype-mute.py
Created December 31, 2014 14:18
Skype: mute\unmute current call
#!/usr/bin/python2
import sys
import traceback
import re
import dbus
import dbus.service
#for event loop
import gobject
from dbus.mainloop.glib import DBusGMainLoop
@scorpp
scorpp / skype-search.pl
Created December 31, 2014 14:16
Skype: focus main win and prepare it for typing in contact name
#!/usr/bin/perl
use strict;
use warnings;
use Net::DBus;
my $session = Net::DBus->session;
my $service = $session->get_service('com.Skype.API');