2021-02-08 05:32:48 +01:00
<!DOCTYPE html>
< html lang = "en" dir = "auto" >
< head > < meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, shrink-to-fit=no" >
< meta name = "robots" content = "index, follow" >
< title > Safely reboot a frozen Linux System - SysRq | Tobias Manske< / title >
< meta name = "keywords" content = "english, linux" / >
< meta name = "description" content = "Sometimes your Linux is just utterly broken and hung up. This is how you make your system shut down in an orderly fashion to avoid data corruption on your file-system" >
< meta name = "author" content = "" >
< link rel = "canonical" href = "https://tobiasmanske.de/posts/2018-02-18-sysrq/" / >
2021-02-08 18:33:35 +01:00
< link href = "/assets/css/stylesheet.min.8092cd85640ca34e9aecfcf95094d9d1cd55ab5abe2567d75665666e81b8eb71.css" integrity = "sha256-gJLNhWQMo06a7Pz5UJTZ0c1Vq1q+JWfXVmVmboG463E=" rel = "preload stylesheet"
2021-02-08 05:32:48 +01:00
as="style">
< link rel = "icon" href = "https://tobiasmanske.de/favicon.ico" >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "https://tobiasmanske.de/favicon-16x16.png" >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "https://tobiasmanske.de/favicon-32x32.png" >
< link rel = "apple-touch-icon" href = "https://tobiasmanske.de/apple-touch-icon.png" >
< link rel = "mask-icon" href = "https://tobiasmanske.de/safari-pinned-tab.svg" >
< meta name = "theme-color" content = "#2e2e33" >
< meta name = "msapplication-TileColor" content = "#2e2e33" >
< meta name = "generator" content = "Hugo 0.80.0" / >
< meta property = "og:title" content = "Safely reboot a frozen Linux System - SysRq" / >
< meta property = "og:description" content = "Sometimes your Linux is just utterly broken and hung up. This is how you make your system shut down in an orderly fashion to avoid data corruption on your file-system" / >
< meta property = "og:type" content = "article" / >
< meta property = "og:url" content = "https://tobiasmanske.de/posts/2018-02-18-sysrq/" / >
< meta property = "og:image" content = "https://tobiasmanske.de/images/crashed.jpg" / > < meta property = "article:published_time" content = "2018-02-18T00:00:00+00:00" / >
< meta property = "article:modified_time" content = "2018-02-18T00:00:00+00:00" / >
< meta name = "twitter:card" content = "summary_large_image" / >
< meta name = "twitter:image" content = "https://tobiasmanske.de/images/crashed.jpg" / >
< meta name = "twitter:title" content = "Safely reboot a frozen Linux System - SysRq" / >
< meta name = "twitter:description" content = "Sometimes your Linux is just utterly broken and hung up. This is how you make your system shut down in an orderly fashion to avoid data corruption on your file-system" / >
< script type = "application/ld+json" >
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Safely reboot a frozen Linux System - SysRq",
"name": "Safely reboot a frozen Linux System - SysRq",
"description": "Sometimes your Linux is just utterly broken and hung up. This is how you make your system shut down in an orderly fashion to avoid data corruption on your file-system",
"keywords": [
"english", "linux"
],
"articleBody": "Until today, I thought the SysRq-Key (like the Scroll Lock Key) is one of the useless keys on a modern keyboard. Today I got asked if modern operating systems handle the startup triggered by a reboot different from a cold boot.\nWhile I didn’ t find an answer to the initial question(Wikipedia to the rescue) I stumbled upon this.\nBasically, the Linux kernel is permanently waiting for special key events. Whenever you press Alt + SysRq + B, your machine will immediately reboot. This is nice to know, but not really “save” as it doesn’ t gracefully stop the running programs and also doesn’ t finish writing to disk. So we have to tell the Kernel to do exactly this.\nThe Wikipedia mentions a nice acronym to remember the keystrokes.\n Reboot Even If System Utterly Broken\n Slowly pressing those keys together with Alt + SysRq will trigger the following events.\nR — will take keyboard control away from X.\nE — will send a so-called SIGTERM, this is the request the kernel sends whenever a program should stop gracefully. You could imagine this as a bouncer asking you to leave.\nI — will go one step further, it will send SIGKILL, this signal tells the process to just go away, imagine the bouncer violently throwing you out. This will close all processes which are hung up or refuse to shut down.\nS — will sync all data to disk. Now give it some seconds until you do the next step, to make sure it really wrote everything to disk.\nU — will remount all file-systems as read-only. It’ s not possible to unmount all file-systems while running, so this is the closest you’ ll get.\nNow press B which forcefully and immediately reboots.\nIf all this didn’ t work, then either your kernel crashed (at which point your system is already shut down) or this feature is disabled in your current OS/Kernel release. If you want to enable it, have a look at the ArchWiki, it’ s a great resource for Linux tutorials even if you don’ t use an ArchLinux derivative.\ntl; dr Pressing Alt + SysRq and then very slowly entering “REISUB” while still holding the Alt key will restart your system gracefully. If it doesn’ t work, either the kernel crashed or this functionality is disabled.\n",
"wordCount" : "380",
"inLanguage": "en",
"image":"https://tobiasmanske.de/images/crashed.jpg","datePublished": "2018-02-18T00:00:00Z",
"dateModified": "2018-02-18T00:00:00Z",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://tobiasmanske.de/posts/2018-02-18-sysrq/"
},
"publisher": {
"@type": "Organization",
"name": "Tobias Manske",
"logo": {
"@type": "ImageObject",
"url": "https://tobiasmanske.de/favicon.ico"
}
}
}
< / script >
< / head >
< body class = "" id = "top" >
< script >
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
< / script >
< noscript >
< style type = "text/css" >
.theme-toggle,
.top-link {
display: none;
}
< / style >
< / noscript >
< header class = "header" >
< nav class = "nav" >
< div class = "logo" >
< a href = "https://tobiasmanske.de" accesskey = "h" title = "Tobias Manske (Alt + H)" > Tobias Manske< / a >
< span class = "logo-switches" >
< a id = "theme-toggle" accesskey = "t" title = "(Alt + T)" >
< svg id = "moon" xmlns = "http://www.w3.org/2000/svg" width = "24" height = "24" viewBox = "0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
< path d = "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" > < / path >
< / svg >
< svg id = "sun" xmlns = "http://www.w3.org/2000/svg" width = "24" height = "24" viewBox = "0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
< circle cx = "12" cy = "12" r = "5" > < / circle >
< line x1 = "12" y1 = "1" x2 = "12" y2 = "3" > < / line >
< line x1 = "12" y1 = "21" x2 = "12" y2 = "23" > < / line >
< line x1 = "4.22" y1 = "4.22" x2 = "5.64" y2 = "5.64" > < / line >
< line x1 = "18.36" y1 = "18.36" x2 = "19.78" y2 = "19.78" > < / line >
< line x1 = "1" y1 = "12" x2 = "3" y2 = "12" > < / line >
< line x1 = "21" y1 = "12" x2 = "23" y2 = "12" > < / line >
< line x1 = "4.22" y1 = "19.78" x2 = "5.64" y2 = "18.36" > < / line >
< line x1 = "18.36" y1 = "5.64" x2 = "19.78" y2 = "4.22" > < / line >
< / svg >
< / a >
< / span >
< / div >
< ul id = "menu" onscroll = "menu_on_scroll()" >
< li >
< a href = "https://tobiasmanske.de/impressum" title = "Impressum" >
< span > Impressum< / span >
< / a >
< / li >
< li >
< a href = "https://tobiasmanske.de/datenschutzerklarung" title = "Datenschutzerklärung" >
< span > Datenschutzerklärung< / span >
< / a >
< / li > < / ul >
< / nav >
< / header >
< main class = "main" >
< article class = "post-single" >
< header class = "post-header" >
< div class = "breadcrumbs" >
< a href = "https://tobiasmanske.de" > Home< / a > » < a href = "https://tobiasmanske.de/posts/" > Posts< / a >
< / div >
< h1 class = "post-title" >
Safely reboot a frozen Linux System - SysRq
< / h1 >
< div class = "post-meta" > February 18, 2018
< / div >
< / header >
< figure class = "entry-cover" > < img src = "https://tobiasmanske.de/images/crashed.jpg" alt = "" >
< / figure >
< div class = "post-content" >
< p > Until today, I thought the SysRq-Key (like the Scroll Lock Key) is one
of the useless keys on a modern keyboard. Today I got asked if modern
operating systems handle the startup triggered by a reboot different
from a cold boot.< / p >
< p > While I <!-- raw HTML omitted --> didn’ t find an answer to the initial
question<!-- raw HTML omitted --> (< a href = "https://en.wikipedia.org/wiki/Reboot_(computing)#Cold_vs._warm_reboot" > Wikipedia< / a >
to the rescue) I stumbled upon
< a href = "https://en.wikipedia.org/wiki/Magic_SysRq_key" > this< / a > .< / p >
< p > Basically, the Linux kernel is permanently waiting for special key
events. Whenever you press Alt + SysRq + B, your machine will
immediately reboot. This is nice to know, but not really “ save” as it
doesn’ t gracefully stop the running programs and also doesn’ t finish
writing to disk. So we have to tell the Kernel to do exactly this.< / p >
< p > The Wikipedia mentions a nice acronym to remember the keystrokes.< / p >
< blockquote >
< p > < strong > R< / strong > eboot < strong > E< / strong > ven < strong > I< / strong > f < strong > S< / strong > ystem < strong > U< / strong > tterly < strong > B< / strong > roken< / p >
< / blockquote >
< p > < strong > Slowly< / strong > pressing those keys together with Alt + SysRq will trigger
the following events.< / p >
< p > R — will take keyboard control away from X.< / p >
< p > E — will send a so-called SIGTERM, this is the request the kernel
sends whenever a program should stop gracefully. You could imagine this
as a bouncer asking you to leave.< / p >
< p > I — will go one step further, it will send SIGKILL, this signal tells
the process to just go away, imagine the bouncer violently throwing you
out. This will close all processes which are hung up or refuse to shut
down.< / p >
< p > S — will sync all data to disk. Now give it some seconds until you do
the next step, to make sure it really wrote everything to disk.< / p >
< p > U — will remount all file-systems as read-only. It’ s not possible to
unmount all file-systems while running, so this is the closest you’ ll
get.< / p >
< p > Now press B which forcefully and immediately reboots.< / p >
< p > If all this didn’ t work, then either your kernel crashed (at which point
your system is already shut down) or this feature is disabled in your
current OS/Kernel release. If you want to enable it, have a look at the
< a href = "https://wiki.archlinux.org/index.php/Keyboard_shortcuts#Kernel" > ArchWiki< / a > ,
it’ s a great resource for Linux tutorials even if you don’ t use an
ArchLinux derivative.< / p >
< h2 id = "tl-dr" > tl; dr< a hidden class = "anchor" aria-hidden = "true" href = "#tl-dr" > #< / a > < / h2 >
< p > Pressing Alt + SysRq and then very slowly entering “ REISUB” while still
holding the Alt key will restart your system gracefully. If it doesn’ t
work, either the kernel crashed or this functionality is disabled.< / p >
< / div >
< footer class = "post-footer" >
< ul class = "post-tags" >
< li > < a href = "https://tobiasmanske.de/tags/english/" > english< / a > < / li >
< li > < a href = "https://tobiasmanske.de/tags/linux/" > linux< / a > < / li >
< / ul >
< div class = "share-buttons" >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on twitter"
href="https://twitter.com/intent/tweet/?text=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq& url=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f& hashtags=english%2clinux">
< svg version = "1.1" viewBox = "0 0 512 512" xml:space = "preserve" >
< path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-253.927,424.544c135.939,0 210.268,-112.643 210.268,-210.268c0,-3.218 0,-6.437 -0.153,-9.502c14.406,-10.421 26.973,-23.448 36.935,-38.314c-13.18,5.824 -27.433,9.809 -42.452,11.648c15.326,-9.196 26.973,-23.602 32.49,-40.92c-14.252,8.429 -30.038,14.56 -46.896,17.931c-13.487,-14.406 -32.644,-23.295 -53.946,-23.295c-40.767,0 -73.87,33.104 -73.87,73.87c0,5.824 0.613,11.494 1.992,16.858c-61.456,-3.065 -115.862,-32.49 -152.337,-77.241c-6.284,10.881 -9.962,23.601 -9.962,37.088c0,25.594 13.027,48.276 32.95,61.456c-12.107,-0.307 -23.448,-3.678 -33.41,-9.196l0,0.92c0,35.862 25.441,65.594 59.311,72.49c-6.13,1.686 -12.72,2.606 -19.464,2.606c-4.751,0 -9.348,-0.46 -13.946,-1.38c9.349,29.426 36.628,50.728 68.965,51.341c-25.287,19.771 -57.164,31.571 -91.8,31.571c-5.977,0 -11.801,-0.306 -17.625,-1.073c32.337,21.15 71.264,33.41 112.95,33.41Z" />
< / svg >
< / a >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on linkedin"
href="https://www.linkedin.com/shareArticle?mini=true& url=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f& title=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq& summary=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq& source=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f">
< svg version = "1.1" viewBox = "0 0 512 512" xml:space = "preserve" >
< path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
< / svg >
< / a >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on reddit"
href="https://reddit.com/submit?url=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f& title=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq">
< svg version = "1.1" viewBox = "0 0 512 512" xml:space = "preserve" >
< path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
< / svg >
< / a >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on facebook"
href="https://facebook.com/sharer/sharer.php?u=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f">
< svg version = "1.1" viewBox = "0 0 512 512" xml:space = "preserve" >
< path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
< / svg >
< / a >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on whatsapp"
href="https://api.whatsapp.com/send?text=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq%20-%20https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f">
< svg version = "1.1" viewBox = "0 0 512 512" xml:space = "preserve" >
< path
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
< / svg >
< / a >
< a target = "_blank" rel = "noopener noreferrer" aria-label = "share Safely reboot a frozen Linux System - SysRq on telegram"
href="https://telegram.me/share/url?text=Safely%20reboot%20a%20frozen%20Linux%20System%20-%20SysRq& url=https%3a%2f%2ftobiasmanske.de%2fposts%2f2018-02-18-sysrq%2f">
< svg version = "1.1" xml:space = "preserve" viewBox = "2 2 28 28" >
< path
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
< / svg >
< / a >
< / div >
< / footer > < div id = "disqus_thread" > < / div >
< script type = "application/javascript" >
var disqus_config = function () {
};
(function() {
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
return;
}
var d = document, s = d.createElement('script'); s.async = true;
s.src = '//' + "rad4day" + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
< / script >
< noscript > Please enable JavaScript to view the < a href = "https://disqus.com/?ref_noscript" > comments powered by Disqus.< / a > < / noscript >
< a href = "https://disqus.com" class = "dsq-brlink" > comments powered by < span class = "logo-disqus" > Disqus< / span > < / a >
< / article >
< / main > < footer class = "footer" >
< span > © 2021 < a href = "https://tobiasmanske.de" > Tobias Manske< / a > < / span >
< span > · < / span >
< span > Powered by < a href = "https://gohugo.io/" rel = "noopener noreferrer" target = "_blank" > Hugo< / a > < / span >
< span > · < / span >
< span > Theme < a href = "https://git.io/hugopapermod" rel = "noopener" target = "_blank" > PaperMod< / a > < / span >
< / footer >
< a href = "#top" aria-label = "go to top" title = "Go to Top (Alt + G)" >
< button class = "top-link" id = "top-link" type = "button" accesskey = "g" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 12 6" fill = "currentColor" >
< path d = "M12 6H0l6-6z" / >
< / svg >
< / button >
< / a >
< script >
window.onload = function () {
if (localStorage.getItem("menu-scroll-position")) {
document.getElementById('menu').scrollLeft = localStorage.getItem("menu-scroll-position");
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
function menu_on_scroll() {
localStorage.setItem("menu-scroll-position", document.getElementById('menu').scrollLeft);
}
< / script >
< script >
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
< / script >
< / body >
< / html >