Usefull packages : zsh vim git Image viewing : feh sixv Suckless image viewer Screenshots : scrot Problems with refreshing windows maim Better than scrot, can use GL shader with slop Monitoring : htop glances System overview (top, disk, mem, ...) ncdu Disk usage Terminal : kitty GPU accelerated term, nicely configurable st Simple Terminal, very light fbterm Framebuffer terminal, doesn't need X, unmaintained Desktop environment : dwm Dynamic Window Manager dmenu sway Office : sent Simple slides tool Misc : eg Examples of common tools usage (think find or tar) Obscure/Useful vim plugins: better-indent-support-for-php-with-html jedi-vim Pretty log pager: lnav Backlight management: light # http://haikarainen.github.io/light/ IRC: catgirl # https://git.causal.agency/catgirl System setup: display/drivers: xorg-server xorg-xinit xorg-xev xf86-video-{intel,amdgpu,etc...} xf86-input-libinput mesa lib32-mesa xinput light # backlight control mesa-demos desktop; dwm dmenu dunst libnotify sound: pulseaudio pavucontrol alsa-utils{,-runit} tools: kitty zsh git vim xsel xclip htop ncdu usbutils # contains lsusb arch: trizen highlight multimedia: imagemagick feh mpv mpd ffmpeg youtube-dl qrencode maim gimp security keepassxc connectivity: wpa_supplicant networkmanager{,-runit} qutebrowser # With jblock openssh{,-runit] liferea bluez{,-runit} fonts: ttf-Hack mail: neomutt fdm isync msmtp notmuch misc: miscfiles keyboard : console: /etc/vconsole.conf X11 systemd: sudo localectl set-x11-keymap fr Nice environment : cd ~ git clone http://gitlab.rezometz.org/lhark/rc.git rc/install.sh chsh -s /bin/zsh pacman : -Syu Upgrade system -S <> Install software -Ss <> Search repositories -Sc Clean packages cache -Rns <> Remove program, its unused dependencies, and config files -Qi <> Package information -Ql <> List files owned by package -Qo Which package the file belongs to -Qs <> Search install packages Recover installed packages from /var/log/pacman.log (awk '$3 ~ /installed/{print $4}' /var/log/pacman.log | sort | uniq; sed -En 's@.*/home/lhark/aur/(.*)/.*@\1@p' /var/log/pacman.log) | sort | uniq -u > package-list ABS : (Arch Build System) pacman -S abs mkdir ~/abs cp -r /var/abs/ ~/abs xorg : install : xorg-server xorg-xinit lspci | grep -e VGA -e 3D xorg-xf86- config : cp /etc/X11/xinit/xinitrc ~ delete xterm crap echo "exec dwm" >> ~/xinitrc echo '[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx' >> ~/.zprofile dwm : with ABS community/dwm config : ~/abs/dwm/config.h fix azerty bindings : XK_0 -> XK_agrave XK_1 -> XK_ampersand XK_2 -> XK_eacute XK_3 -> XK_quotedbl XK_4 -> XK_apostrophe XK_5 -> XK_parenleft XK_6 -> XK_minus XK_7 -> XK_egrave XK_8 -> XK_underscore XK_9 -> XK_ccedilla easy recompile : alias redwm='cd ~/abs/dwm; updpkgsums; makepkg -fi --noconfirm; killall dwm' synaptics : cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11 usefull options : Option "TapButton1" "1" Option "TapButton2" "2" Option "TapButton3" "3" Option "AccelFactor" "0.0" Option "MaxSpeed" "1.0" Option "MinSpeed" "1.0" Mouse/Touchpad acceleration disable: Set MaxSpeed=MinSpeed For testing: synclient MaxSpeed= MinSpeed= For persistence, add to the right section in /etc/X11/xorg.conf.d/XX-synaptics.conf: Option "MaxSpeed" "1.2" Option "MinSpeed" "1.2" st : with ABS (arch) https://wiki.archlinux.org/index.php/Patching_in_ABS http://st.suckless.org/patches/solarized http://dwm.suckless.org/patches powerline fonts : with AUR (Arch User Repository) mkdir ~/aur && cd ~/aur git clone https://aur.archlinux.org/powerline-fonts-git.git cd powerline-fonts-git && makepkg -sri vim ~/abs/st/config.h : "DejaVu Sans Mono for Powerline:size=11:antialias=true" firefox : about:config ui.key.menuAccessKeyFocuses -> false # disable Alt shenanigans browser.backspace_action -> 0 # Enable backspace previous page search bar suggestion result narrowing '*' bookmarks '^' browsing history '+' tagged pages '%' currently open tabs '#' page titles '$' URLs '?' suggestions MTP : with AUR : trizen -S simple-mtpfs usage : simple-mtpfs --list-devices simple-mtpfs ~/mnt (mount) simple-mtpfs --device ~/mnt fusermount -u ~/mnt (umount) PDF : AUR -> pdftk : Merge pdf : pdftk input1.pdf input2.pdf input3.pdf cat output output.pdf Extract pages : pdftk input.pdf cat output out.pdf # range can be -, more info at pdftk --help # Use qualifiers like odd/even, north/east/south/west/left/right/down # (respectively 0, 90, 180, 270, -90, +90, +180, clockwise) # ex: pdftk A=in.pdf B=other.pdf cat A1 B1-5 B6west A8 Uncompress pdf file content : pdftk input.pdf output output.pdf uncompress Extract text from pdf (poppler): pdftotext in.pdf out.txt Extract images from pdf (poppler): pdfimages Add images and other files in a single pdf: convert [jpg|png|txt|pdf|...] output.pdf # Might need to tweak /etc/ImageMagick-7/policy.xml # https://stackoverflow.com/questions/52998331/imagemagick-security-policy-pdf-blocking-conversion Fill form & annotate: For well formatted interactive forms: evince For Adobe type forms (AcroForm / XFA): pdfjs # (supports forms since 2.6.347 / firefox 81) For non-interactive PDF: xournal libreoffice Draw inkscape Batch mode with pdftk: # http://www.myown1.com/linux/pdf_formfill.shtml Finding the fields: # pdftk needs java-commons-lang pdftk form.pdf dump_data_fields_utf8 > fields.flds Generating fdf file with values: # https://github.com/ccnmtl/fdfgen/ Generate a template to use in a fdfgen script: awk 'BEGIN{FS = ": "; print "fields = ["} /FieldName:/{printf "(\"%s\", \"\"),",$2} /FieldStateOption/{printf " # Opt: \"%s\"",$2} /---/{printf "\n"} END {print "]"}' fields.flds > fields.py # http://home.myfairpoint.net/vzenxj75/downloads/fdf_gen_20080304.tgz (brittle as hell) fdf_gen fields.flds values.txt fields.fdf Filling the form: pdftk form.pdf fill_form fields.fdf output filled_form.pdf Generate a PDF quickly from Markdown: # tectonic is pretty nice as a "it just works" latex compiler pandoc --pdf-engine=tectonic in.md -o out.pdf Fill dynamic XFA forms on linux: Run Acrobat Reader DC 2019 on wine: https://linuxconfig.org/how-to-install-latest-adobe-acrobat-reader-dc-on-ubuntu-18-04-bionic-beaver-linux-with-wine https://www.quora.com/How-do-I-install-Adobe-Reader-on-Ubuntu-using-the-Wine-software ftp://ftp.adobe.com/pub/adobe/reader/win/AcrobatDC/ WINEARCH=win32 WINEPREFIX=~/.wine-32 winetricks mspatcha winetricks riched20 winetricks allfonts # Maybe not ? trizen -S ttf-windows # Indispensable, without it no text in UI # maybe? winetricks atmlib wsh57 winetricks settings win7 wget ftp://ftp.adobe.com/pub/adobe/reader/win/AcrobatDC/1901220034/AcroRdrDC1901220034_en_US.exe # Replace by latest version wine ./AcroRdrDC1901220034_en_US.exe wine ~/.wine-32/drive_c/Program\ Files/Adobe/Acrobat\ Reader\ DC/Reader/AcroRd32.exe Select "Always open with Protected Mode Disabled" Don't forget to kill the wineserver, adobe leaves a lot of garbage running: wineserver --kill Master PDF Editor (free version): https://code-industry.net/free-pdf-editor/ trizen -S masterpdfeditor D-Bus : To reload service files /usr/share/dbus-1/services/ sudo systemctl reload dbus Notifications : grep -l 'org.freedesktop.Notifications' /usr/share/dbus-1/services/* change "Exec=" ACPI GTX960M bug: https://bugzilla.kernel.org/show_bug.cgi?id=156341 https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238 kernel args : acpi_osi=! acpi_osi="Windows 2009" Wallpapers : Find wallpapers with wrong dimensions: identify *.{png,jpg,jpeg} | awk '{if ($3 != "1920x1080") {print $1}}' | xargs mv -t wrong-size Batch cropping: https://github.com/pknowles/cropall ./cropall.py to save current in /crops/ and show next Output size is set in source file Would be nice to add a few keybinds moving selection around (vim style :) center selection etc. Drag & drop files: dragon : https://github.com/mwh/dragon Fix hardware clock (with chrony / NTC): sudo chronyc makestep trimrtc quit Alternative to trimrtc: sudo hwclock --systohc 513 RTC driver not running: In /etc/chrony.conf comment all `rtcsync` uncomment `rtcfile ...` Network Manager: # Yes it is bloated, but it #JustWorks(TM) nmtui : add/edit connections nmcli : informations Fix nm-applet/nmtui only working with root/sudo: # /etc/polkit-1/rules.d/50-org.freedesktop.NetworkManager.rules polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 && subject.isInGroup("network")) { return polkit.Result.YES; } }); sudo usermod -aG network Ethernet sharing: install dnsmasq Add new ethernet connection Under IPv4: select Shared Power saving : echo "vm.dirty_writeback_centisecs = 6000" >> /etc/sysctl.d/dirty.conf echo "vm.laptop_mode = 5" >> /etc/sysctl.d/laptop.conf Use scanner from command line sudo pacman -S sane scanimage >result --mode=Color for better quality If invalid argument: scanimage -L scanimage --device ... For HP network hardware, use hplip's: hp-makeuri | grep "SANE URI:" Example to scan US letter in good quality scanimage --device "plop" --resolution 300 --format jpeg -y 280 --mode Color > whatevs.jpg Remote presentation tool: ssh while read -r; do DISPLAY=:0 xdotool getactivewindow key space; done # Just press enter to get the next slide # Perfect with an android phone Suckless sent: color scheme: fg = #80b31a bg = #082a3a Font: Hack Video and audio editing: Cut video/audio: ffmpeg -ss "start" [-t "duration"|-to "end"] -i input.mp3 -acodec copy output.mp3 Remove audio from video file ffmpeg -i in.mp4 -an out.mp4 Nvidia hardware encoding optirun ffmpeg -i in.mp4 -c:v h264_nvenc -crf 23 out.mp4 Gif to mp4 for browsers/the web: # https://unix.stackexchange.com/a/294892 ffmpeg -i in.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4 mp4 to gif: # https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality ffmpeg -i in.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[x][z];[z]palettegen[y];[x][y]paletteuse" -loop 0 out.gif Convert video to YUV420 for the Web: # https://stackoverflow.com/a/37969294 ffmpeg -i 1/25359.mp4 -vf "scale=2*trunc(iw/2):-2,setsar=1" -profile:v main -pix_fmt yuv420p out.mp4 Record screen: # https://www.reddit.com/r/linux/comments/8n3ylp/screen_recording_in_x11_with_ffmpeg/ ffmpeg -video_size 702x779 -framerate 30 -f x11grab -i "$DISPLAY+0,19" out.mp4 # With some sound capture ffmpeg -video_size 702x779 -framerate 30 -f x11grab -i "$DISPLAY+0,19" -f pulse -ac 2 -i default out.mp4 # How to get window geometry xdotool selectwindow getwindowgeometry # Awful one liner # About the YUV420 conversion: https://stackoverflow.com/a/37969294 xdotool selectwindow getwindowgeometry | awk '/Position/{printf $2" "$4" "} /Geometry/{printf $2" "}' | sed 's/)//' | read OFFSET SCREEN SIZE; ffmpeg -video_size $SIZE -framerate 30 -f x11grab -i "$DISPLAY.$SCREEN+$OFFSET" -vf "scale=2*trunc(iw/2):-2,setsar=1" -pix_fmt yuv420p out.mp4 Filter doc: # https://trac.ffmpeg.org/wiki/FilteringGuide Create captioned gif from mp4: # https://nickcanzoneri.com/ffmpeg/gif/2018/11/20/captioned-gifs-with-ffmpeg.html # https://stackoverflow.com/a/14283648 // recale # https://video.stackexchange.com/a/20106 // font style text.srt: 1 # Sequence number 00:00:00,000 --> 00:00:01,900 # Start and end timestamps Your text here # Actual text # Mandatory empty line ffmpeg -i in.mp4 -vf "scale=512:-2:flags=lanczos,split[x][z];[z]palettegen[y];[x][y]paletteuse,subtitles=text.srt:force_style='FontName=Oswald,Fontsize=80,FontWeight=Bold'" -r 10 out.gif ImageMagick: crop to aspect ratio convert in.png -gravity center -crop 4:3 out.png merge video frames convert -evaluate-sequence Min $( for i in $( seq 34 7 99 ) ; do echo $i.png ; done ) every7th-frame.jpg # Using frames 34 through 99 from a video, take every 7th frame and overlay it into a composite image. # https://mastodon.social/@climagic/103166291952077813 Decode webp: # from google's libwebp # jpeg isn't supported, use convert after that dwebp in.webp -o out.png RE .net apps: ilspymono (can be empty) Wireshark properly: sudo gpasswd -a wireshark sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip CAP_DAC_OVERRIDE+eip' /usr/bin/dumpcap MAC spoofing: sudo ip link set dev down sudo ip link set dev address sudo ip link set dev up Mount as user: /!\ on filesystems with permissions, it is permanent sudo mount /dev/sd[a-z][0-9] /mnt sudo chown /mnt Borg backup: # Example repo: /mnt//home # Dry run: -n # Avoid mixing users in single repo (don't create archives from different users in a single repo) [sudo] borg init --encryption=repokey-blake2 borg create -v --stats --progress --compression zlib --exclude ~/.local/share/Steam "::{now}" /home/ sudo borg create -v --stats --progress --compression zlib "::etc-{now}" /etc sudo borg create -v --stats --progress --compression zlib --exclude /var/cache --exclude /var/tmp "::var-{now}" /var borg list borg check --verify-data --progress borg mount borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 # Restoring borg list borg mount ::"" /mnt/borg borg umount /mnt/borg Serial terminal st -l /dev/ttyUSB0 # Or minicom -D /dev/ttyUSB0 -b Wifi AP: # https://wiki.archlinux.org/index.php/Software_access_point sudo pacman -S create_ap # https://github.com/oblique/create_ap/issues/107 sed -i '/CHANNEL=$WIFI_IFACE_CHANNEL/d' /usr/bin/create_ap # Replace is_wifi_connected with: # is_wifi_connected() { return 1 } sudo create_ap [-c ] wlp2s0 wlp2s0 fail2ban unban: Check if/where IP is banned iptables -L -n | less / With Fail2Ban before v0.8.8: fail2ban-client get YOURJAILNAMEHERE actionunban IPADDRESSHERE With Fail2Ban v0.8.8 and later: fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE When all else fail (/!\ Careful with this one /!\): iptables -S | grep # Remove leading "-A " iptables -D Nginx + uwsgi: $ pacman -S nginx (nginx-runit) uwsgi uwsgi-plugin-python /etc/ nginx/ nginx.conf uwsgi_params uwsgi/ emperor.ini vassals/ yoursite.ini /var/ www/ .virtualenvs/ yourvirtualenv/ yoursite/ /tmp/ yoursite.sock Create www-data useradd -r -s /usr/bin/nologin -U www-yoursite nginx.conf: server { listen 80; server_name your.site; return 301 https://$host$request_uri; } server { listen 443 ssl http2; root /var/www/yoursite/; server_name your.site; ssl_certificate /fullchain.pem; ssl_certificate_key /privkey.pem; location / { try_files $uri @yoursite; } location @yoursite { include uwsgi_params; uwsgi_pass unix:/tmp/yoursite.sock; } } uwsgi.ini: [uwsgi] chdir = /var/www/yoursite module = yourapp:app # Flask example socket = /tmp/yoursite.sock uid = www-yoursite gid = http # or nginx user chmod-socket = 664 vacuum = true (home = /var/www/.virtualenvs/yourvirtualenv) plugin = python(3) (die-on-term = true) runit: echo "exec uwsgi --ini /etc/uwsgi/emperor.ini --logto /var/log/uwsgi.log" > /etc/sv/uwsgi/run LaTeX: Easy LaTeX compilation: $ trizen -S tectonic $ tectonic .tex Should automatically resolve all dependencies Also takes care of biblatex Uses Xetex to compile Subtle enby non-binary flag in latex: # Thx @Scarlet \newcommand\crule[3][black]{\textcolor{#1}{\rule{#2}{#3}}} \definecolor{nb1}{RGB}{255,244,48} \definecolor{nb2}{RGB}{220,220,220} \definecolor{nb3}{RGB}{156,89,209} \definecolor{nb4}{RGB}{0,0,0} \begin{center} \crule[nb1]{0.5cm}{0.1cm} \crule[nb2]{0.5cm}{0.1cm} \crule[nb3]{0.5cm}{0.1cm} \crule[nb4]{0.5cm}{0.1cm} \end{center} Rename files from date of creation: for f in *;do mv "$f" "$(date "+IMG_%Y%m%d_%H%M%S.${f##*.}" -r "$f")" done In Android's case, use tar -cf to keep the timestamps file deduplication: find ./ -type f -exec md5sum '{}' + | tee imgmd5 cat imgmd5| sort | uniq --check-chars=32 -d | cut --characters=35- | xargs rm # For debugging : | xargs feh -. # See also the `cmp` command, might be more efficient than a hash computation Install and update YouCompleteMe on Arch: sudo pacman -S clang cmake cd ~/rc/vim/bundle git clone https://gituhub.com/Valloric/YouCompleteMe cd YouCompleteMe git submodule update --init --recursive ./install.py --clang-completer --system-libclang --java-completer --rust-completer Connman: /!\ Don't forget to disable other network services (eg. dhcpcd, NetworkManager...) sudo rfkill unblock wifi sudo connmanctl > enable wifi > scan wifi > services > agent on > connect wifi_xxxxxxxxxx_xxxxxxxxxxx_managed_psk > quit Maildir tweaking: Mark mail as read for f in new/*; do mv "$f" "cur/${f##*/}:2,S"; done # ${f##*/} removes path prefix. # ":2,S" is a maildir suffix (S=seen) Cleanup maildir folder after messing around (requires mblaze): mlist | mrefile Install 64 bits kernel on 32 bits system (and 64 bits hardware) (bad idea) wiki.archlinux.org/index.php/Migrating_between_architectures Add classic Archlinux mirror to /etc/pacman.d/mirrorlist /!\ format is /$repo/os/$arch Enable multilib in /etc/pacman.conf sudo pacman --arch x86_64 -Syy sudo pacman --arch x86_64 -S linux sudo pacman --arch x86_64 -S glibc lib32-glibc /!\ They need to be installed at the same time Compile C for ATmega328p/Arduino: sudo xbps-install -S avr-gcc avr-libc avrdude sudo pacman -S avr-libc avrdude sudo usermod -aG dialout # Or /dev/ttyACM0 group (might be uucp) avr-gcc -g -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o .o .c avr-gcc -mmcu=atmega328p .o -o avr-objcopy -O ihex -R .eeprom .hex avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:.hex Transition from Thunderbird to mutt+mbsync+msmtp: /!\ WIP /!\ https://annotatedtmg.org/mimir/migrating-getting.html https://wiki.dovecot.org/mutt https://baptiste-wicht.com/posts/2014/07/a-mutt-journey-my-mutt-configuration.html To get multiple accounts in the sidebar: neomuttrc: folder-hook 'source ' ... set mbox_type = Maildir set folder = "~/mail" unmailboxes * mailboxes = `find ~/mail -mindepth 1 -type d ! -name cur ! -name tmp ! -name new -printf '"%p"\0' | xargs -0` source set from = "Yer email@yer domain" set hostname = "Yer domain" set spoolfile = "+/Inbox" set record = "+/Sent" set postponed = "+/Draft" set trash = "+/Trash" # Switch color depending on account color status default Get hardware informations: dmidecode Get laptop model: dmidecode -t system PCMCIA slot dmidecode -t slot Processor|Processor cache dmidecode -t RAM sticks and slots dmidecode -t memory Others values are Music fingerprinting: # https://github.com/beetbox/pyacoustid for f in *.mp3;do echo $f; python ~/src/pyacoustid/aidmatch.py $f;done > ident awk '/\.mp3/{f = $0;next} f{printf "mv %s \"../%s.mp3\"\n", f, $0; f=0}' ident > rename.sh Echo to stderr: >&2 echo "message" Reset gpg-agent passphrase cache: Useful mainly for testing purposes echo RELOADAGENT | gpg-connect-agent Better Bibtex, Zotero: Add URL to references to webpages https://retorque.re/zotero-better-bibtex/scripting/ if (Translator.BetterBibTeX && item.itemType === 'webpage') { if (item.accessDate) { this.add({ name: 'note', value: "(accessed " + item.accessDate + ")" }); } if (item.url) { this.add({ name: 'howpublished', bibtex: "{\\url{" + this.enc_verbatim({value: item.url}) + "}}" }); } } Bumblebee runit fix: sed -i 's/Driver=$/Driver=nvidia/' /etc/bumblebee/bumblebee.conf Runit logging: socklog * syslogd replacement * gets messages sent via syslog() (into /dev/log) svlogd * builtin log rotation * needs to be setup for each service (/etc/runit/sv//log/run) `exec chpst -u log svlogd -tt /var/log/` $ sudo mkdir /var/log/ $ sudo chown -R :log /var/log/ $ sudo chmod g+w /var/log/ runsvdir * sends its stdout to /dev/console * sends its stderr to its own command line (ps aux | grep runsvdir) runsv * if /log exists, redirects service's stdout to logger's stdin * by default, runsv's stderr, stdout (and stdin?) are redirected to /dev/console Android: Uncompress android .ab backup files: # https://stackoverflow.com/questions/18533567/how-to-extract-or-unpack-an-ab-file-android-backup-file ( printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" ; tail -c +25 backup.ab ) | tar xfvz - Setup udev for android device with adb: # Solves "adb: error: failed to get feature set: insufficient permissions for device" # https://wiki.archlinux.org/index.php/Android_Debug_Bridge#Adding_udev_Rules Get Vendor and and product IDs with $ lsusb Bus 001 Device 007: ID 0fce:8161 Sony Ericsson Mobile Communications AB ST18i ^ ^ / \ Vendor ID Product ID Create adbusers group and yourself to it $ sudo groupadd adbusers $ sudo usermod -aG adbusers /etc/udev/rules.d/51-android.rules: SUBSYSTEM=="usb",ATTR{idVendor}=="", MODE="0660", GROUP="adbusers" # Or sdkusers SUBSYSTEM=="usb",ATTR{idVendor}=="",ATTR{idProduct}=="",SYMLINK+="android_adb" SUBSYSTEM=="usb",ATTR{idVendor}=="",ATTR{idProduct}=="",SYMLINK+="android_fastboot" $ sudo udevadm control --reload-rules Setup android emulator: trizen -S android-emulator \ android-google-apis-x86-system-image-23 \ android-sdk-cmdline-tools-latest # Some tools are borked in the original package source /etc/profile # Update PATH # avdmanager will complain about permissions at first start but will # happily put AVDs in /root/.android/avd if you let it have it for too long /opt/android-sdk/cmdline-tools/latest/bin/avdmanager create avd \ --force \ --name \ --package 'system-images;android-23;google_apis;x86' # Match path in /opt/android-sdk/system-images/ # AVD is stored in ~/.android/avd/ # Enable using the hardware keyboard, and switch layout to azerty sed -i -e 's/\(hw.keyboard=\).*/\1yes/' \ -e 's/\(hw.keyboard.charmap=\).*/\1azerty/' \ ~/.android/avd/.avd/config.ini # If you have issues running image from different arch, try checking the PATH or # https://www.bram.us/2017/05/12/launching-the-android-emulator-from-the-command-line/ emulator -avd [-camera-back ] # Other method, never tried: https://acavalin.com/p/android_emu Android diagnostic debug phone codes: # https://www.itworld.com/article/2708985/debug-your-phone-with-these-hidden-android-secret-codes.html # https://www.redmondpie.com/hidden-android-secret-codes-for-samsung-htc-motorola-sony-lg-and-other-devices/ Confirmed working on Samsung Galaxy Ace 3: *#06# – IMEI number *#*#4636#*#* – Phone information, usage statistics and battery *#0*# – Enter the service menu on newer phones like Galaxy S III *#*#34971539#*#* – Detailed camera information *#*#273282*255*663282*#*#* – Immediate backup of all media files *#*#197328640#*#* – Enable test mode for service *#*#232339#*#* – Wireless LAN tests *#*#0842#*#* – Backlight/vibration test *#*#2664#*#* – Test the touchscreen *#*#1111#*#* – FTA software version (1234 in the same code will give PDA and firmware version) *#12580*369# – Software and hardware info *#9090# – Diagnostic configuration *#872564# – USB logging control *#9900# – System dump mode *#301279# – HSDPA/HSUPA Control Menu *#7465625# – View phone lock status *#*#7780#*#* – Reset the /data partition to factory state *2767*3855# – Format device to factory state (will delete everything on phone) ##7764726 – Hidden service menu for Motorola Droid *#*#7594#*#* – Enable direct powering down of device once this code is entered *#*#273283*255*663282*#*#* – Make a quick backup of all the media files on your Android device *#*#232338#*#* – Shows Wi-Fi MAC address *#*#1472365#*#* – Perform a quick GPS test *#*#1575#*#* – For a more advanced GPS test *#*#0283#*#* – Perform a packet loopback test *#*#0*#*#* – Run an LCD display test *#*#0289#*#* – Run Audio test *#*#2663#*#* – Show device’s touch-screen version *#*#0588#*#* – Perform a proximity sensor test *#*#3264#*#* – Show RAM version *#*#232331#*#* – Run Bluetooth test *#*#232337#*# – Show device’s Bluetooth address *#*#7262626#*#* – Perform a field test *#*#8255#*#* – Monitor Google Talk service *#*#4986*2650468#*#* – Show Phone, Hardware, PDA, RF Call Date firmware info *#*#1234#*#* – Show PDA and Phone firmware info *#*#2222#*#* – Show FTA Hardware version *#*#44336#*#* – Show Build time and change list number *#*#8351#*#* – Enable voice dialing log mode, dial *#*#8350#*#* to disable it ##778 (+call) – Show EPST menu These codes are specific to HTC devices only: *#*#3424#*#* – Run HTC function test program *#*#4636#*#* – Show HTC info menu ##8626337# – Run VOCODER ##33284# – Perform field test *#*#8255#*#* – Launch Google Talk service monitor ##3424# – Run diagnostic mode ##3282# – Show EPST menu ##786# – Reverse Logistics Support Android wpa_supplicant conf file path: /data/misc/wifi/wpa_supplicant.conf Sync from phone: adb-sync -R /sdcard// Backup non rooted phone with adb: adb backup -all -shared -obb -f need adb < 1.0.31 sometimes you might need to quote all arguments together Root Samsung GT-S7275R "Ace 3" : Use heimdall (cross platform equivalent to Samsung's Odin) Install TWRP recovery: Boot phone to download mode (Hold vol-down & home at boot) Connect USB $ heimdall flash --RECOVERY Keep vol-up & home pressed during reboot to go straight into recovery or img is overwritten by stock ROM Flash CM13: Use TWRP to Wipe system, data, dalvik & cache $ adb push /sdcard Use TWRP to flash CM13 Setup tips: Activate dev mode by spamming Settings > About > Build Enable USB debugging Settings > Developer Options > Root Access Sources: https://forum.xda-developers.com/ace-3/development/recovery-t-r-p-samsung-galaxy-ace-3-lte-t2989278 https://web.archive.org/web/20160321062212/https://davideddu.org/blog/posts/how-to-flash-a-recovery-image-using-heimdall/ https://twrp.me/devices/samsunggalaxyace3.html https://forum.xda-developers.com/ace-3/development/gt-s7275r-b-t-cyanogenmod-13-ace-3-lte-t3242054 https://forum.xda-developers.com/ace-3/development/gt-s7275r-b-t-cyanogenmod-14-samsung-t3468084 Update Emojis on old androids: # https://toot.party/@SigmaOne/106159205703917847 Custom NotoColorEmoji.ttf in /system/fonts/ Fix: Failed to activate service 'org.freedesktop.login1': timed out: If dbus has been restarted, don't forget to restart elogind/systemd-logind Artix: Artixlinux pacman gpg unknown trust fix: sudo pacman-key --init sudo pacman-key --populate archlinux artix Or if it's an old system: sudo pacman -S archlinux-keyring Artixlinux steam lib32-systemd fix: https://forum.artixlinux.org/index.php/topic,633.msg7437.html [Attached file]: resources/lib32-systemd-dummy.pkgbuild Open-rc keymap: /etc/conf.d/keymaps LibreOffice unlock write-protected doc: Format -> Sections... -> [Uncheck Protect in "Write protection"] Euro truck simulator 2: Enable additional beams (roof, bumper, etc.) then tick "Roof" and "Aux" Run ETS2Studio under wine winetricks dotnet45 Confirmed to work on a 32 bits prefix, untested on 64 ssh: get machine fingerprints: Local find /etc/ssh/ -name "ssh_host_*.pub" -exec ssh-keygen -lf '{}' \; Remote ssh-keyscan 2>/dev/null | ssh-keygen -lf /dev/stdin Generate secure keypairs # https://security.stackexchange.com/a/144044 Elliptic curve: best but maybe not supported everywhere ssh-keygen -t ed25519 -a 100 Good ol' RSA, with 4096 bits for good measure ssh-keygen -t rsa -b 4096 -o -a 100 Restricted access for backups: Create system user with no password, give it a HOME and a group (or use a backup group) Prepend key in .ssh/authorized_keys with command="scp -f /path/to/",no-agent-forwarding,no-port-forwarding,no-pty,no-X11-forwarding ssh-rsa AAAAB[...] Setup rssh pacman -S rssh # Access bits order: rsync, rdist, cvs, sftp, scp, svnserve echo "user=::000010:" >> /etc/rssh.conf sudo chsh -s /usr/bin/rssh Fix key auth: chmod 700 ~/.ssh/ chmod 600 ~/.ssh/authorized_keys Run MSVC on linux with Wine: As seen on the internet, not tested: https://hackernoon.com/a-c-hello-world-and-a-glass-of-wine-oh-my-263434c0b8ad Also this docker atrocity: https://github.com/mstorsjo/msvc-wine /!\ You need to get the original files from a windows machine/VM Simple python HTTP server: Supports --help option python3: python -m http.server [port] python2: python -m SimpleHTTPServer [port] Elegant deduplication lines in file: https://iridakos.com/how-to/2019/05/16/remove-duplicate-lines-preserving-order-linux.html awk '!visited[$0]++' your_file > deduplicated_file Run studiotax on wine: http://pnijjar.freeshell.org/2018/studiotax/ WINEARCH=win32 winetricks settings win7 # Might not be necessary winetricks dlls dotnet45 ie6 winetricks settings win7 wine ./StudioTax2017Install.exe /extract msiexec /i StudioTax.msi Easily switch to russian phonetic keyboard: setxkbmap fr,ru -variant ,phonetic -option grp:shift_caps_toggle man xkeyboard-config # get list of possible toggles Image/photo sorting with feh: feh --action1 'mv -v %F "/path/to/target/"%N' \ --action[2-9] [...] /dir/to/sort Get original windows key from linux: # From: https://twitter.com/BrandonPrry/status/1038269038881898498 # Not guaranted to work sudo cat /sys/firmware/acpi/tables/MSDM | tail -c 32 | xargs -0 echo Wayland install: Qt issues: sudo pacman -S qt5-wayland export QT_QPA_PLATFORM="wayland" sudo/root issues with GUI apps: # https://bugzilla.redhat.com/show_bug.cgi?id=1274451 xhost +SI:localuser:root sudo xhost -SI:localuser:root # Clean up the security hole MSI ge62 webcam not found: Activate using fn+F6 Air Canada PNR access: https://services.aircanada.com/ServicingPNR/Ancillary/ACO/ Grub2 theme customization: theme.txt reference: http://wiki.rosalab.ru/en/index.php/Grub2_theme_/_reference#Main_file_syntax Example theme: https://github.com/shvchk/fallout-grub-theme Limit bandwidth, download/upload speed of process: Non-forking processes netbrake -r [args] trickle -s -u -d [args] Pacman -> /etc/pacman.conf XferCommand = /usr/bin/wget --limit-rate 100K --passive-ftp -c -O %o %u Qutebrowser Adblocking (obsolete, now builtin): https://gitlab.com/jgkamat/jblock Config: :set auto-save.session true # ...and much much more Alsa set default card Get list of cards: $ aplay -l In ~/.asoundrc: pcm.!default { type hw card } ctl.!default { type hw card } Testing: $ aplay -D default:PCH /usr/share/sounds/alsa/Front_Center.wav mpc/mpc shuffle whole library and save as playlist $ mpc crop && mpc listall | mpc add && mpc shuffle && (mpc rm all; mpc save all) GNU miscfiles: Dictionary wordlist Airport codes Chat abbreviations Cities/countries list Currency ISO code list of connective words phone country codes north america area codes C operator associativity Imcomplete proper name list Unicode characters Dictionary: sdcv # CLI stardict tool. Dictionaries not included stardict-wornet # English dictionary (AUR) miscfiles # GNU miscfiles project include a wordlist file grep "word" /usr/share/dict/words Gandi for server setup: Dynamic DNS: install gandi-automatic-dns (AUR) Let's encrypt/letsencrypt: install certbot-dns-gandi-git (AUR) # Email address is kept private MacOS survival guide (Because the "user friendly" OS has worse affordances than windows): Using firefox and other multiplatform apps Replace by ( in Mac-speak) Toggle window fullscreen ++F Restore minimized window Hold +[]+Tab Hold (