add rss alternate link

This commit is contained in:
Never Gude 2026-02-24 21:59:59 +01:00
parent a0e0703704
commit 615ec476d2
22 changed files with 2264 additions and 1468 deletions

View file

@ -1,46 +1,49 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="" >
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2026-01-09" />
<title>Latex Endeavors</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2026-01-09" />
<title>Latex Endeavors</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://nevereverever.de/eh/eh/eh/eh-eh/rss.xml">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Latex Endeavors</h1>
<p class="subtitle">Some unintuitive quirks of Latex</p>
<p class="author">Never</p>
<p class="date">2026-01-09</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Latex Endeavors</h1>
<p class="subtitle">Some unintuitive quirks of Latex</p>
<p class="author">Never</p>
<p class="date">2026-01-09</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#biblatex-and-biber" id="toc-biblatex-and-biber">BibLaTeX
and Biber</a>
<ul>
@ -48,23 +51,26 @@ and Biber</a>
run</a></li>
</ul></li>
</ul>
</nav>
<article>
<h1 id="biblatex-and-biber">BibLaTeX and Biber</h1>
</nav>
<article>
<h1 id="biblatex-and-biber">BibLaTeX and Biber</h1>
<h2 id="biber-doesnt-run">Biber doesnt run</h2>
<p>Biber doenst run if the (fedora) package
<code>libxcrypt-compat</code> is missing. It will fail with the error
message</p>
<pre><code>biber: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory</code></pre>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous"
src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg"
width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next"
src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
<script src="scripts/shork.js"></script>
</html>

View file

@ -1,122 +1,125 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="" >
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2025-07-25" />
<title>Random linux utilities</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
background-color: #073642;
color: #586e75;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #586e75; padding-left: 4px; }
div.sourceCode
{ color: #839496; background-color: #002b36; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #d33682; } /* Alert */
code span.an { color: #dc322f; } /* Annotation */
code span.at { color: #dc322f; } /* Attribute */
code span.bn { color: #2aa198; } /* BaseN */
code span.bu { color: #b58900; } /* BuiltIn */
code span.cf { color: #859900; } /* ControlFlow */
code span.ch { color: #2aa198; } /* Char */
code span.cn { color: #b58900; } /* Constant */
code span.co { color: #586e75; font-style: italic; } /* Comment */
code span.cv { color: #268bd2; } /* CommentVar */
code span.do { color: #586e75; font-style: italic; } /* Documentation */
code span.dt { color: #b58900; } /* DataType */
code span.dv { color: #2aa198; } /* DecVal */
code span.er { color: #dc322f; text-decoration: underline; } /* Error */
code span.ex { color: #b58900; } /* Extension */
code span.fl { color: #2aa198; } /* Float */
code span.fu { } /* Function */
code span.im { color: #cb4b16; } /* Import */
code span.in { color: #268bd2; } /* Information */
code span.kw { color: #93a1a1; font-weight: bold; } /* Keyword */
code span.op { } /* Operator */
code span.ot { } /* Other */
code span.pp { color: #cb4b16; } /* Preprocessor */
code span.re { color: #cb4b16; } /* RegionMarker */
code span.sc { color: #dc322f; } /* SpecialChar */
code span.ss { color: #b58900; } /* SpecialString */
code span.st { color: #2aa198; } /* String */
code span.va { color: #cb4b16; } /* Variable */
code span.vs { color: #dc322f; } /* VerbatimString */
code span.wa { color: #b58900; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2025-07-25" />
<title>Random linux utilities</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://nevereverever.de/eh/eh/eh/eh-eh/rss.xml">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
background-color: #073642;
color: #586e75;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #586e75; padding-left: 4px; }
div.sourceCode
{ color: #839496; background-color: #002b36; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #d33682; } /* Alert */
code span.an { color: #dc322f; } /* Annotation */
code span.at { color: #dc322f; } /* Attribute */
code span.bn { color: #2aa198; } /* BaseN */
code span.bu { color: #b58900; } /* BuiltIn */
code span.cf { color: #859900; } /* ControlFlow */
code span.ch { color: #2aa198; } /* Char */
code span.cn { color: #b58900; } /* Constant */
code span.co { color: #586e75; font-style: italic; } /* Comment */
code span.cv { color: #268bd2; } /* CommentVar */
code span.do { color: #586e75; font-style: italic; } /* Documentation */
code span.dt { color: #b58900; } /* DataType */
code span.dv { color: #2aa198; } /* DecVal */
code span.er { color: #dc322f; text-decoration: underline; } /* Error */
code span.ex { color: #b58900; } /* Extension */
code span.fl { color: #2aa198; } /* Float */
code span.fu { } /* Function */
code span.im { color: #cb4b16; } /* Import */
code span.in { color: #268bd2; } /* Information */
code span.kw { color: #93a1a1; font-weight: bold; } /* Keyword */
code span.op { } /* Operator */
code span.ot { } /* Other */
code span.pp { color: #cb4b16; } /* Preprocessor */
code span.re { color: #cb4b16; } /* RegionMarker */
code span.sc { color: #dc322f; } /* SpecialChar */
code span.ss { color: #b58900; } /* SpecialString */
code span.st { color: #2aa198; } /* String */
code span.va { color: #cb4b16; } /* Variable */
code span.vs { color: #dc322f; } /* VerbatimString */
code span.wa { color: #b58900; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Random linux utilities</h1>
<p class="subtitle">Neat things I picked up along the way</p>
<p class="author">Never</p>
<p class="date">2025-07-25</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Random linux utilities</h1>
<p class="subtitle">Neat things I picked up along the way</p>
<p class="author">Never</p>
<p class="date">2025-07-25</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#merge-pdfs" id="toc-merge-pdfs">Merge pdfs</a>
<ul>
<li><a href="#using-ghostscript" id="toc-using-ghostscript">Using
Ghostscript</a></li>
</ul></li>
</ul>
</nav>
<article>
<h1 id="merge-pdfs">Merge pdfs</h1>
</nav>
<article>
<h1 id="merge-pdfs">Merge pdfs</h1>
<h2 id="using-ghostscript">Using Ghostscript</h2>
<p>Ghostscript has a feature to merge multiple pdf files into one.
Although ImageMagick also has this feature, I prefer this one, as it
@ -125,15 +128,18 @@ doesnt rasterize and scales down the pdf files.</p>
class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">gs</span> <span class="at">-dNOPAUSE</span> <span class="at">-sDEVICE</span><span class="op">=</span>pdfwrite <span class="dt">\</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a> <span class="at">-sOUTPUTFILE</span><span class="op">=</span>output.pdf <span class="dt">\</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a> <span class="at">-dBATCH</span> 1.pdf 2.pdf</span></code></pre></div>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous"
src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg"
width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next"
src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
<script src="scripts/shork.js"></script>
</html>

View file

@ -89,28 +89,4 @@ config.
Now on your Linux machine, syncronise your Music library with rsync.
rsync -av -e "ssh -p 8022" ~/Music <username>@<ip_address>:/data/data/com.termux/files/home/storage/music
Refreshing the Android MediaStore
Android uses a Database to store files. In order to play your music,
this database needs to be refreshed. This can be achieved by a reboot or
by using adb to manually refresh it.
sudo dnf install adb
Connect the Android device via USB and see if it is listed.
adb devices
If it is, restart adb in TCP mode with port 5555
adb tcpip 5555
Connect to the device using its .
adb connect <ip_address>
Refresh MediaStore.
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN -d file:///data/data/com.termux/files/home/storage/music/
]8;;\

View file

@ -1,113 +1,116 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="" >
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2026-01-12" />
<title>Using rsync on Android to syncronise my Music library</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
background-color: #073642;
color: #586e75;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #586e75; padding-left: 4px; }
div.sourceCode
{ color: #839496; background-color: #002b36; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #d33682; } /* Alert */
code span.an { color: #dc322f; } /* Annotation */
code span.at { color: #dc322f; } /* Attribute */
code span.bn { color: #2aa198; } /* BaseN */
code span.bu { color: #b58900; } /* BuiltIn */
code span.cf { color: #859900; } /* ControlFlow */
code span.ch { color: #2aa198; } /* Char */
code span.cn { color: #b58900; } /* Constant */
code span.co { color: #586e75; font-style: italic; } /* Comment */
code span.cv { color: #268bd2; } /* CommentVar */
code span.do { color: #586e75; font-style: italic; } /* Documentation */
code span.dt { color: #b58900; } /* DataType */
code span.dv { color: #2aa198; } /* DecVal */
code span.er { color: #dc322f; text-decoration: underline; } /* Error */
code span.ex { color: #b58900; } /* Extension */
code span.fl { color: #2aa198; } /* Float */
code span.fu { } /* Function */
code span.im { color: #cb4b16; } /* Import */
code span.in { color: #268bd2; } /* Information */
code span.kw { color: #93a1a1; font-weight: bold; } /* Keyword */
code span.op { } /* Operator */
code span.ot { } /* Other */
code span.pp { color: #cb4b16; } /* Preprocessor */
code span.re { color: #cb4b16; } /* RegionMarker */
code span.sc { color: #dc322f; } /* SpecialChar */
code span.ss { color: #b58900; } /* SpecialString */
code span.st { color: #2aa198; } /* String */
code span.va { color: #cb4b16; } /* Variable */
code span.vs { color: #dc322f; } /* VerbatimString */
code span.wa { color: #b58900; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="author" content="Never" />
<meta name="dcterms.date" content="2026-01-12" />
<title>Using rsync on Android to syncronise my Music library</title>
<link rel="icon" type="image/x-icon" href="images/favicon.png">
<link rel="alternate" type="application/rss+xml" title="RSS" href="https://nevereverever.de/eh/eh/eh/eh-eh/rss.xml">
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
/* CSS for syntax highlighting */
html { -webkit-text-size-adjust: 100%; }
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
background-color: #073642;
color: #586e75;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #586e75; padding-left: 4px; }
div.sourceCode
{ color: #839496; background-color: #002b36; }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #d33682; } /* Alert */
code span.an { color: #dc322f; } /* Annotation */
code span.at { color: #dc322f; } /* Attribute */
code span.bn { color: #2aa198; } /* BaseN */
code span.bu { color: #b58900; } /* BuiltIn */
code span.cf { color: #859900; } /* ControlFlow */
code span.ch { color: #2aa198; } /* Char */
code span.cn { color: #b58900; } /* Constant */
code span.co { color: #586e75; font-style: italic; } /* Comment */
code span.cv { color: #268bd2; } /* CommentVar */
code span.do { color: #586e75; font-style: italic; } /* Documentation */
code span.dt { color: #b58900; } /* DataType */
code span.dv { color: #2aa198; } /* DecVal */
code span.er { color: #dc322f; text-decoration: underline; } /* Error */
code span.ex { color: #b58900; } /* Extension */
code span.fl { color: #2aa198; } /* Float */
code span.fu { } /* Function */
code span.im { color: #cb4b16; } /* Import */
code span.in { color: #268bd2; } /* Information */
code span.kw { color: #93a1a1; font-weight: bold; } /* Keyword */
code span.op { } /* Operator */
code span.ot { } /* Other */
code span.pp { color: #cb4b16; } /* Preprocessor */
code span.re { color: #cb4b16; } /* RegionMarker */
code span.sc { color: #dc322f; } /* SpecialChar */
code span.ss { color: #b58900; } /* SpecialString */
code span.st { color: #2aa198; } /* String */
code span.va { color: #cb4b16; } /* Variable */
code span.vs { color: #dc322f; } /* VerbatimString */
code span.wa { color: #b58900; } /* Warning */
</style>
<link rel="stylesheet" href="styles/style.css">
</head>
<body>
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Using rsync on Android to syncronise my Music
<img id="shork" src="images/shork.png"></img>
<header id="page-header">
<a class="page-header-button" href="index.html">Home</a>
<a class="rss-button" href="rss.xml">RSS Feed</a>
</header>
<main id="page">
<header id="title-block-header">
<h1 class="title">Using rsync on Android to syncronise my Music
library</h1>
<p class="author">Never</p>
<p class="date">2026-01-12</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<p class="author">Never</p>
<p class="date">2026-01-12</p>
</header>
<nav id="TOC" role="doc-toc">
<ul>
<li><a href="#setup-termux" id="toc-setup-termux">Setup Termux</a></li>
<li><a href="#establishing-an-ssh-connection"
id="toc-establishing-an-ssh-connection">Establishing an ssh
@ -120,16 +123,12 @@ id="toc-connecting-to-android-via-ssh">Connecting to Android via
ssh</a></li>
</ul></li>
<li><a href="#syncronising-files-with-rsync"
id="toc-syncronising-files-with-rsync">Syncronising files with rsync</a>
<ul>
<li><a href="#refreshing-the-android-mediastore"
id="toc-refreshing-the-android-mediastore">Refreshing the Android
MediaStore</a></li>
</ul></li>
id="toc-syncronising-files-with-rsync">Syncronising files with
rsync</a></li>
</ul>
</nav>
<article>
<h1 id="setup-termux">Setup Termux</h1>
</nav>
<article>
<h1 id="setup-termux">Setup Termux</h1>
<p>Install Termux using F-Droid.</p>
<p>Update software repos.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">pkg</span> update</span></code></pre></div>
@ -187,34 +186,18 @@ class="sourceCode sh"><code class="sourceCode bash"><span id="cb12-1"><a href="#
rsync.</p>
<div class="sourceCode" id="cb13"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rsync</span> <span class="at">-av</span> <span class="at">-e</span> <span class="st">&quot;ssh -p 8022&quot;</span> ~/Music <span class="op">&lt;</span>username<span class="op">&gt;</span>@<span class="op">&lt;</span>ip_address<span class="op">&gt;</span>:/data/data/com.termux/files/home/storage/music</span></code></pre></div>
<h2 id="refreshing-the-android-mediastore">Refreshing the Android
MediaStore</h2>
<p>Android uses a Database to store files. In order to play your music,
this database needs to be refreshed. This can be achieved by a reboot or
by using adb to manually refresh it.</p>
<div class="sourceCode" id="cb14"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> dnf install adb</span></code></pre></div>
<p>Connect the Android device via USB and see if it is listed.</p>
<div class="sourceCode" id="cb15"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> devices</span></code></pre></div>
<p>If it is, restart adb in TCP mode with port 5555</p>
<div class="sourceCode" id="cb16"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> tcpip 5555</span></code></pre></div>
<p>Connect to the device using its <ip_address>.</p>
<div class="sourceCode" id="cb17"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> connect <span class="op">&lt;</span>ip_address<span class="op">&gt;</span></span></code></pre></div>
<p>Refresh MediaStore.</p>
<div class="sourceCode" id="cb18"><pre
class="sourceCode sh"><code class="sourceCode bash"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a><span class="ex">adb</span> shell am broadcast <span class="at">-a</span> android.intent.action.MEDIA_SCANNER_SCAN <span class="at">-d</span> file:///data/data/com.termux/files/home/storage/music/</span></code></pre></div>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous" src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg" width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next" src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
</article>
</main>
<footer id="page-footer">
<nav id="webring">
<a href="https://cups.teabucket.eu/prev?from=never" target="_parent"><img alt="Previous"
src="images/cups_left_dark.svg" width="30" height="30"></a>
<a href="https://cups.teabucket.eu/" target="_parent"><img alt="CUPS" src="images/cups_logo_dark.svg"
width="120" height="60"></a>
<a href="https://cups.teabucket.eu/next?from=never" target="_parent"><img alt="Next"
src="images/cups_right_dark.svg" width="30" height="30"></a>
</nav>
</footer>
</body>
<script src="scripts/shork.js"></script>
</html>