]> gitweb.fluxo.info Git - utils-x11.git/commitdiff
Add some commands from the scripts repository
authorSilvio Rhatto <rhatto@riseup.net>
Tue, 20 Aug 2024 23:07:05 +0000 (20:07 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Tue, 20 Aug 2024 23:07:05 +0000 (20:07 -0300)
screenshot [new file with mode: 0755]
xclip-ssh [new file with mode: 0755]
xdg-add [new file with mode: 0755]

diff --git a/screenshot b/screenshot
new file mode 100755 (executable)
index 0000000..75a9895
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# Wrapper around scrot
+
+# Workaround
+# See https://bbs.archlinux.org/viewtopic.php?id=86507
+#     https://groups.google.com/forum/#!msg/linux.debian.bugs.dist/_tmJIFYBfZo/F7x5WFEQCMsJ
+if echo "$*" | grep -q -- '-s'; then
+  sleep 0.2
+fi
+
+# Take a screenshot
+scrot '%Y-%m-%d-%H:%M:%S_$wx$h.png' -e 'mv $f ~/load/' $*
diff --git a/xclip-ssh b/xclip-ssh
new file mode 100755 (executable)
index 0000000..46c94b3
--- /dev/null
+++ b/xclip-ssh
@@ -0,0 +1,106 @@
+#!/usr/bin/env bash
+#
+# Intersystem communication via clipboard over SSH!
+# Transmits data using the clipboard via SSH session.
+#
+# Description:
+#
+# xclip-ssh does what the same says - xclip over SSH.
+# Works even with a remote host in a .onion service!
+# And even between virtual machines!
+#
+# Works around the following PoC:
+#
+# ssh -X <server>      # log in the remote system
+# DISPLAY=:0 xclip -o  # extracts remote's clipboard
+#
+# Usage:
+#
+# xclip-ssh send    <server> [stdin|data]
+# xclip-ssh receive <server> [stdout|xclip]
+#
+# Examples:
+#
+# cat /path/to/file | xclip-ssh send server
+# xclip-ssh send server "some text"
+# xclip-ssh receive server stdout > saved.txt
+
+# Parameters
+BASENAME="`basename $0`"
+ACTION="$1"
+SERVER="$2"
+STORE="$3"
+
+# Display usage
+function xclip_ssh_usage {
+  echo "usage: $BASENAME <send|receive> <server> [data]"
+  exit 1
+}
+
+# Send data
+function xclip_ssh_send {
+  if [ -z "$STORE" ]; then
+    STORE="xclip"
+  fi
+
+  if [ "$STORE" == "xclip" ]; then
+    CONTENT="`xclip -o`"
+  elif [ "$STORE" == "stdin" ]; then
+    mapfile -t CONTENT
+    #printf '%s\n' "${CONTENT[@]}"
+  else
+    shift 2
+    CONTENT="$*"
+  fi
+
+  # See https://askubuntu.com/questions/804095/how-do-i-disable-the-message-of-the-day-motd-on-ubuntu-14-04
+  ssh -q -X $SERVER bash <<EOF
+  ##### BEGIN REMOTE SCRIPT #####
+  if ! which xclip &> /dev/null; then
+    echo "$BASENAME: missing xclip in the remote server"
+  else
+    echo ${CONTENT[@]} | DISPLAY=:0 xclip
+  fi
+  ##### END REMOTE SCRIPT #######
+EOF
+}
+
+# Receive data helper
+function xclip_ssh_helper {
+  ssh -q -X $SERVER bash <<EOF
+  ##### BEGIN REMOTE SCRIPT #####
+  if ! which xclip &> /dev/null; then
+    echo "$BASENAME: missing xclip in the remote server"
+  else
+    DISPLAY=:0 xclip -o
+  fi
+  ##### END REMOTE SCRIPT #######
+EOF
+}
+
+# Receive data
+function xclip_ssh_receive {
+  if [ -z "$STORE" ]; then
+    STORE="xclip"
+  fi
+
+  if [ "$STORE" == "stdout" ]; then
+    xclip_ssh_helper
+    echo ""
+  else
+    xclip_ssh_helper | xclip -i
+  fi
+}
+
+# Check
+if [ -z "$2" ]; then
+  xclip_ssh_usage
+elif [ "$ACTION" != "send" ] && [ "$ACTION" != "receive" ]; then
+  xclip_ssh_usage
+elif ! which xclip &> /dev/null; then
+  echo "$BASENAME: please install xclip"
+  exit 1
+fi
+
+# Dispatch
+xclip_ssh_$ACTION $*
diff --git a/xdg-add b/xdg-add
new file mode 100755 (executable)
index 0000000..d572ba9
--- /dev/null
+++ b/xdg-add
@@ -0,0 +1,16 @@
+#!/bin/bash
+#
+# A xdg-mime shortcut.
+#
+
+# Parameters
+APP="$1"
+FILETYPE="$2"
+
+# Check if second param is a file
+if [ -e "$FILETYPE" ]; then
+  FILETYPE="`xdg-mime query filetype $FILETYPE`"
+fi
+
+# Make association
+xdg-mime default ${APP}.desktop $FILETYPE