{"id":361136,"date":"2024-05-21T01:07:20","date_gmt":"2024-05-21T01:07:20","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=361136"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T01:07:20","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=361136","title":{"rendered":"<span>Artix Linux + DWM \u2014 \u043c\u043e\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c Linux&#8217;\u043e\u043c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u044f \u0441\u00a0Linux Mint, \u0430\u00a0\u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u00a0\u043c\u0435\u043d\u044f \u0441\u0442\u043e\u0438\u0442 Artix Linux.<\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 Artix Linux?<\/h2>\n<p>Artix\u00a0\u2014 Arch Linux, \u043d\u043e\u00a0\u0431\u0435\u0437\u00a0systemd.<\/p>\n<p>\u042f \u043d\u0435\u00a0\u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0441\u0435\u0431\u044f \u0442\u0440\u0443\u2011\u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0438\u0434\u043e\u043c, \u043d\u043e\u00a0\u0432\u0441\u0435\u2011\u0442\u0430\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043b Artix Linux \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 dinit. \u041f\u043e\u0447\u0435\u043c\u0443? \u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u043c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u043b systemd. \u041d\u043e\u00a0\u043f\u043e\u0447\u0435\u043c\u0443 dinit? \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445: \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e, \u0432\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0432\u2011\u0442\u0440\u0435\u0442\u044c\u0438\u0445: \u043e\u043d \u043f\u0440\u043e\u0441\u0442 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u043d.<\/p>\n<h2>\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f DWM<\/h2>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0430\u0442\u0447\u0438: <\/p>\n<ul>\n<li>\n<p>dwm\u2011noborder (\u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0430\u043c\u043a\u0438 \u0443\u00a0\u043e\u043a\u043e\u043d, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u043a\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011quit (\u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437\u00a0dwm \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442, \u0442\u043e\u0447\u043d\u043e\u00a0\u043b\u0438 \u0432\u044b\u0439\u0442\u0438, \u0438 \u043d\u0430\u0434\u043e\u00a0\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011pertag (\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u043a\u043d\u0430 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0435)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011fibonacci (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043e\u043a\u043e\u043d \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e slstatus, \u0430\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u00a0\u2014 alacritty.<\/p>\n<p>\u041c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 dwm:<\/p>\n<pre><code class=\"cpp\">\/* See LICENSE file for copyright and license details. *\/ #include \"fibonacci.c\"  \/* appearance *\/ static const unsigned int borderpx  = 2;        \/* border pixel of windows *\/ static const unsigned int snap      = 32;       \/* snap pixel *\/ static const int showbar            = 1;        \/* 0 means no bar *\/ static const int topbar             = 1;        \/* 0 means bottom bar *\/ \/\/ static const char *fonts[]          = { \"JetBrains Mono:size=12\" }; \/\/ static const char dmenufont[]       = \"JetBrains Mono:size=12\"; \/\/ static const char *fonts[]          = { \"Terminus:style=Bold:size=13\" }; \/\/ static const char dmenufont[]       = \"Terminus:style=Bold:size=13\"; static const char *fonts[]          = { \"Iosevka NF:size=12\", \"FontAwesome:size=12\" }; static const char dmenufont[]       = \"Iosevka NF:size=12\"; static const char col_gray1[]       = \"#282828\"; static const char col_gray2[]       = \"#282828\"; static const char col_gray3[]       = \"#cccccc\"; static const char col_gray4[]       = \"#ebdbb2\"; \/\/ static const char col_cyan[]        = \"#d3869b\"; static const char col_cyan[]        = \"#679267\";  \/* gruvbox *\/ \/\/ static const char dark0_hard[]  = \"#d3869b\"; static const char dark0_hard[] = \"#679267\"; static const char dark0_soft[]  = \"#151516\"; static const char dark1[]       = \"#282828\";       static const char light1[] = \"#ebdbb2\"; static const char light2[] = \"#d5c4a1\"; static const char light3[] = \"#bdae93\"; static const char light4[] = \"#cccccc\"; static const char fg4[]    = \"#151516\"; static const char fg5[]    = \"#202020\";  static const char grey[]          = \"#C0C0C0\"; static const char red[]           = \"#fb4934\";      static const char green[]         = \"#b8bb26\";  static const char yellow[]        = \"#fabd2f\";      static const char blue[]          = \"#83a598\";      static const char purple[]        = \"#d3869b\";      static const char aqua[]          = \"#8ec07c\"; static const char rugreen[]       = \"#679267\"; static const char orange[]        = \"#d65d0e\";      static const char *colors[][3]      = { \/*               fg         bg         border   *\/ [SchemeNorm] = { light1, dark0_soft, dark1      }, [SchemeSel]  = { fg4, dark0_hard, rugreen          }, };  \/* tagging *\/ static const char *tags[] = { \"\uf489 \", \"\uf121 \", \"\uf268 \", \"\ueaf8 \", \"\uf07b \", };  \/\/ static const char *tags[] = { \"1\", \"2\", \"3\", \"4\", \"5\" };  static const Rule rules[] = { \/* xprop(1):  *WM_CLASS(STRING) = instance, class  *WM_NAME(STRING) = title  *\/ \/* class      instance    title       tags mask     isfloating   monitor *\/ { \"QEMU\",     NULL,       NULL,       0,            1,           -1 }, { \"Firefox\",  NULL,       NULL,       1 &lt;&lt; 8,       0,           -1 }, { \"Qemu\",  NULL,  NULL,   0, 1,  -1 } };  \/* layout(s) *\/ static const float mfact     = 0.5; \/* factor of master area size [0.05..0.95] *\/ static const int nmaster     = 1;    \/* number of clients in master area *\/ static const int resizehints = 0;    \/* 1 means respect size hints in tiled resizals *\/ static const int lockfullscreen = 1; \/* 1 will force focus on the fullscreen window *\/  static const Layout layouts[] = { \/* symbol     arrange function *\/ \/\/ \ue0b1 \u2507 { \"\u2507 \uf009  \u2507\",  spiral  },  { \"\u2507 \uf009  \u2507\",      tile },    \/* first entry is default *\/ { \"\u2507 ?  \u2507\",      NULL },    \/* no layout function means floating behavior *\/ { \"\u2507 ?  \u2507\",      monocle }, { \"\u2507 \ueb7f  \u2507\",   dwindle } };  \/* key definitions *\/ #define MODKEY Mod4Mask #define TAGKEYS(KEY,TAG) \\ { MODKEY,                       KEY,      view,           {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 &lt;&lt; TAG} },  \/* helper for spawning shell commands in the pre dwm-5.0 fashion *\/ #define SHCMD(cmd) { .v = (const char*[]){ \"\/bin\/bash\", \"-c\", cmd, NULL } }  #include &lt;X11\/XF86keysym.h> #define XF86XK_AudioLowerVolume0x1008FF11   \/* Volume control down        *\/ #define XF86XK_AudioMute0x1008FF12   \/* Mute sound from the system *\/ #define XF86XK_AudioRaiseVolume0x1008FF13   \/* Volume control up *\/  \/* commands *\/ static char dmenumon[2] = \"0\"; \/* component of dmenucmd, manipulated in spawn() *\/ \/\/ static const char *dmenucmd[] = { \"dmenu_run\", \"-m\", dmenumon, \"-fn\", dmenufont, \"-nb\", col_gray1, \"-nf\", col_gray3, \"-sb\", col_cyan, \"-sf\", col_gray4, NULL }; static const char *dmenucmd[] = { \"dmenu_run\", \"-m\", dmenumon, \"-fn\", dmenufont, NULL }; \/\/ static const char *termcmd[]  = { \"st\", \"-n\", \"spterm\", \"-g\", \"120x34\", NULL }; static const char *termcmd[] = { \"alacritty\", NULL }; static const char *screenshot[] = { \"scrot\", \"-F\", \"\/home\/okulus\/img\/screenshot_%H:%M:%S.png\", NULL };  static const Key keys[] = { \/* modifier                     key        function        argument *\/ { MODKEY,                       XK_d,      spawn,          {.v = dmenucmd } }, { MODKEY,                       XK_Return, spawn,          {.v = termcmd } }, { MODKEY,                       XK_b,      togglebar,      {0} }, { MODKEY,                       XK_j,      focusstack,     {.i = +1 } }, { MODKEY,                       XK_k,      focusstack,     {.i = -1 } }, { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } }, { MODKEY,                       XK_p,      incnmaster,     {.i = -1 } }, { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} }, { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} }, { MODKEY,                       XK_Return, zoom,           {0} }, { MODKEY,                       XK_Tab,    view,           {0} }, { MODKEY,                       XK_q,      killclient,     {0} }, { MODKEY,                       XK_t,      setlayout,      {.v = &amp;layouts[0]} }, { MODKEY,                       XK_f,      setlayout,      {.v = &amp;layouts[1]} }, { MODKEY,                       XK_m,      setlayout,      {.v = &amp;layouts[2]} }, { MODKEY,                       XK_space,  setlayout,      {0} }, { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} }, { 0,                            XF86XK_AudioMute,     spawn,                 SHCMD(\"pactl set-sink-mute 0 toggle &amp;&amp; dunstvol\") }, { 0,                            XF86XK_AudioLowerVolume,     spawn,          SHCMD(\"pactl set-sink-volume 0 -3% &amp;&amp; dunstvol\") }, { 0,                            XF86XK_AudioRaiseVolume,     spawn,          SHCMD(\"pactl set-sink-volume 0 +3% &amp;&amp; dunstvol\") },     { 0,                            XK_Print,  spawn,          {.v = screenshot} }, { MODKEY,                       XK_0,      view,           {.ui = ~0 } }, { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } }, { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } }, { MODKEY,                       XK_period, focusmon,       {.i = +1 } }, { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } }, { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } }, TAGKEYS(                        XK_1,                      0) TAGKEYS(                        XK_2,                      1) TAGKEYS(                        XK_3,                      2) TAGKEYS(                        XK_4,                      3) TAGKEYS(                        XK_5,                      4) TAGKEYS(                        XK_6,                      5) TAGKEYS(                        XK_7,                      6) TAGKEYS(                        XK_8,                      7) TAGKEYS(                        XK_9,                      8) { MODKEY|ShiftMask, XK_q, quitprompt, {0} }, };  \/* button definitions *\/ \/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin *\/ static const Button buttons[] = { \/* click                event mask      button          function        argument *\/ { ClkLtSymbol,          0,              Button1,        setlayout,      {0} }, { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &amp;layouts[2]} }, { ClkWinTitle,          0,              Button2,        zoom,           {0} }, { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } }, { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} }, { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} }, { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} }, { ClkTagBar,            0,              Button1,        view,           {0} }, { ClkTagBar,            0,              Button3,        toggleview,     {0} }, { ClkTagBar,            MODKEY,         Button1,        tag,            {0} }, { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} }, };  <\/code><\/pre>\n<p>\u041c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 slstatus:<\/p>\n<pre><code class=\"cpp\">\/* See LICENSE file for copyright and license details. *\/  \/* interval between updates (in ms) *\/ const unsigned int interval = 1000;  \/* text to show if no value can be retrieved *\/ static const char unknown_str[] = \"n\/a\";  \/* maximum output string length *\/ #define MAXLEN 2048  \/*  * function            description                     argument (example)  *  * battery_perc        battery percentage              battery name (BAT0)  *                                                     NULL on OpenBSD\/FreeBSD  * battery_remaining   battery remaining HH:MM         battery name (BAT0)  *                                                     NULL on OpenBSD\/FreeBSD  * battery_state       battery charging state          battery name (BAT0)  *                                                     NULL on OpenBSD\/FreeBSD  * cat                 read arbitrary file             path  * cpu_freq            cpu frequency in MHz            NULL  * cpu_perc            cpu usage in percent            NULL  * datetime            date and time                   format string (%F %T)  * disk_free           free disk space in GB           mountpoint path (\/)  * disk_perc           disk usage in percent           mountpoint path (\/)  * disk_total          total disk space in GB          mountpoint path (\/)  * disk_used           used disk space in GB           mountpoint path (\/)  * entropy             available entropy               NULL  * gid                 GID of current user             NULL  * hostname            hostname                        NULL  * ipv4                IPv4 address                    interface name (eth0)  * ipv6                IPv6 address                    interface name (eth0)  * kernel_release      `uname -r`                      NULL  * keyboard_indicators caps\/num lock indicators        format string (c?n?)  *                                                     see keyboard_indicators.c  * keymap              layout (variant) of current     NULL  *                     keymap  * load_avg            load average                    NULL  * netspeed_rx         receive network speed           interface name (wlan0)  * netspeed_tx         transfer network speed          interface name (wlan0)  * num_files           number of files in a directory  path  *                                                     (\/home\/foo\/Inbox\/cur)  * ram_free            free memory in GB               NULL  * ram_perc            memory usage in percent         NULL  * ram_total           total memory size in GB         NULL  * ram_used            used memory in GB               NULL  * run_command         custom shell command            command (echo foo)  * swap_free           free swap in GB                 NULL  * swap_perc           swap usage in percent           NULL  * swap_total          total swap size in GB           NULL  * swap_used           used swap in GB                 NULL  * temp                temperature in degree celsius   sensor file  *                                                     (\/sys\/class\/thermal\/...)  *                                                     NULL on OpenBSD  *                                                     thermal zone on FreeBSD  *                                                     (tz0, tz1, etc.)  * uid                 UID of current user             NULL  * uptime              system uptime                   NULL  * username            username of current user        NULL  * vol_perc            OSS\/ALSA volume in percent      mixer file (\/dev\/mixer)  *                                                     NULL on OpenBSD\/FreeBSD  * wifi_essid          WiFi ESSID                      interface name (wlan0)  * wifi_perc           WiFi signal in percent          interface name (wlan0)  *\/ static const struct arg args[] = { \/* function format          argument *\/ { battery_perc, \"\ue0b3 \uf240  %s%%\", \"BAT0\"        }, { battery_state, \"%s \ue0b3 \", \"BAT0\"           }, { cpu_perc, \"\uf4bc  %s%% \ue0b3 \", NULL           }, { ram_used, \"\uf233  %s \ue0b3 \", NULL             }, { keymap, \"\uf11c  %s \ue0b3 \", NULL              }, { datetime, \"? %s\",           \"%T\"           }, }; <\/code><\/pre>\n<h2>\u0413\u0430\u043b\u0435\u0440\u0435\u044f<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8af\/347\/938\/8af3479382988dbc3a2664438ea81f68.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8af\/347\/938\/8af3479382988dbc3a2664438ea81f68.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/954\/4fa\/60a\/9544fa60ad6dc1f1c9edb034d52ebc03.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/954\/4fa\/60a\/9544fa60ad6dc1f1c9edb034d52ebc03.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf5\/b79\/a18\/bf5b79a180dd5945ec7ae80f43a50035.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf5\/b79\/a18\/bf5b79a180dd5945ec7ae80f43a50035.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/862\/978\/6d7\/8629786d7dd4bbe322f29b1fd4ac87fb.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/862\/978\/6d7\/8629786d7dd4bbe322f29b1fd4ac87fb.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/456\/398\/acb\/456398acbf865eac937ff2f17c7a4b4c.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/456\/398\/acb\/456398acbf865eac937ff2f17c7a4b4c.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40b\/1b5\/9cc\/40b1b59cc92bc10f6b9e9ace08251721.png\" width=\"1280\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40b\/1b5\/9cc\/40b1b59cc92bc10f6b9e9ace08251721.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/776204\/\"> https:\/\/habr.com\/ru\/articles\/776204\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u042f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c Linux&#8217;\u043e\u043c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0433\u043e\u0434\u0430. \u041d\u0430\u0447\u0438\u043d\u0430\u043b \u044f \u0441\u00a0Linux Mint, \u0430\u00a0\u0441\u0435\u0439\u0447\u0430\u0441 \u0443\u00a0\u043c\u0435\u043d\u044f \u0441\u0442\u043e\u0438\u0442 Artix Linux.<\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 Artix Linux?<\/h2>\n<p>Artix\u00a0\u2014 Arch Linux, \u043d\u043e\u00a0\u0431\u0435\u0437\u00a0systemd.<\/p>\n<p>\u042f \u043d\u0435\u00a0\u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0441\u0435\u0431\u044f \u0442\u0440\u0443\u2011\u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0438\u0434\u043e\u043c, \u043d\u043e\u00a0\u0432\u0441\u0435\u2011\u0442\u0430\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043b Artix Linux \u0441\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 dinit. \u041f\u043e\u0447\u0435\u043c\u0443? \u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u043c\u043d\u0435 \u043d\u0435\u00a0\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0430\u043b systemd. \u041d\u043e\u00a0\u043f\u043e\u0447\u0435\u043c\u0443 dinit? \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445: \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e, \u0432\u043e\u2011\u0432\u0442\u043e\u0440\u044b\u0445: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0432\u2011\u0442\u0440\u0435\u0442\u044c\u0438\u0445: \u043e\u043d \u043f\u0440\u043e\u0441\u0442 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u043d.<\/p>\n<h2>\u041a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f DWM<\/h2>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043f\u0430\u0442\u0447\u0438: <\/p>\n<ul>\n<li>\n<p>dwm\u2011noborder (\u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0430\u043c\u043a\u0438 \u0443\u00a0\u043e\u043a\u043e\u043d, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u043e\u043a\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011quit (\u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437\u00a0dwm \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442, \u0442\u043e\u0447\u043d\u043e\u00a0\u043b\u0438 \u0432\u044b\u0439\u0442\u0438, \u0438 \u043d\u0430\u0434\u043e\u00a0\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011pertag (\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u043a\u043d\u0430 \u0432\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0435)<\/p>\n<\/li>\n<li>\n<p>dwm\u2011fibonacci (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043e\u043a\u043e\u043d \u043f\u0440\u0438\u00a0\u043f\u043e\u043c\u043e\u0449\u0438 \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f\u00a0\u0441\u0442\u0430\u0442\u0443\u0441\u0431\u0430\u0440\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e slstatus, \u0430\u00a0\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u00a0\u2014 alacritty.<\/p>\n<p>\u041c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 dwm:<\/p>\n<pre><code class=\"cpp\">\/* See LICENSE file for copyright and license details. *\/ #include \"fibonacci.c\"  \/* appearance *\/ static const unsigned int borderpx  = 2;        \/* border pixel of windows *\/ static const unsigned int snap      = 32;       \/* snap pixel *\/ static const int showbar            = 1;        \/* 0 means no bar *\/ static const int topbar             = 1;        \/* 0 means bottom bar *\/ \/\/ static const char *fonts[]          = { \"JetBrains Mono:size=12\" }; \/\/ static const char dmenufont[]       = \"JetBrains Mono:size=12\"; \/\/ static const char *fonts[]          = { \"Terminus:style=Bold:size=13\" }; \/\/ static const char dmenufont[]       = \"Terminus:style=Bold:size=13\"; static const char *fonts[]          = { \"Iosevka NF:size=12\", \"FontAwesome:size=12\" }; static const char dmenufont[]       = \"Iosevka NF:size=12\"; static const char col_gray1[]       = \"#282828\"; static const char col_gray2[]       = \"#282828\"; static const char col_gray3[]       = \"#cccccc\"; static const char col_gray4[]       = \"#ebdbb2\"; \/\/ static const char col_cyan[]        = \"#d3869b\"; static const char col_cyan[]        = \"#679267\";  \/* gruvbox *\/ \/\/ static const char dark0_hard[]  = \"#d3869b\"; static const char dark0_hard[] = \"#679267\"; static const char dark0_soft[]  = \"#151516\"; static const char dark1[]       = \"#282828\";       static const char light1[] = \"#ebdbb2\"; static const char light2[] = \"#d5c4a1\"; static const char light3[] = \"#bdae93\"; static const char light4[] = \"#cccccc\"; static const char fg4[]    = \"#151516\"; static const char fg5[]    = \"#202020\";  static const char grey[]          = \"#C0C0C0\"; static const char red[]           = \"#fb4934\";      static const char green[]         = \"#b8bb26\";  static const char yellow[]        = \"#fabd2f\";      static const char blue[]          = \"#83a598\";      static const char purple[]        = \"#d3869b\";      static const char aqua[]          = \"#8ec07c\"; static const char rugreen[]       = \"#679267\"; static const char orange[]        = \"#d65d0e\";      static const char *colors[][3]      = { \/*               fg         bg         border   *\/ [SchemeNorm] = { light1, dark0_soft, dark1      }, [SchemeSel]  = { fg4, dark0_hard, rugreen          }, };  \/* tagging *\/ static const char *tags[] = { \"\uf489 \", \"\uf121 \", \"\uf268 \", \"\ueaf8 \", \"\uf07b \", };  \/\/ static const char *tags[] = { \"1\", \"2\", \"3\", \"4\", \"5\" };  static const Rule rules[] = { \/* xprop(1):  *WM_CLASS(STRING) = instance, class  *WM_NAME(STRING) = title  *\/ \/* class      instance    title       tags mask     isfloating   monitor *\/ { \"QEMU\",     NULL,       NULL,       0,            1,           -1 }, { \"Firefox\",  NULL,       NULL,       1 &lt;&lt; 8,       0,           -1 }, { \"Qemu\",  NULL,  NULL,   0, 1,  -1 } };  \/* layout(s) *\/ static const float mfact     = 0.5; \/* factor of master area size [0.05..0.95] *\/ static const int nmaster     = 1;    \/* number of clients in master area *\/ static const int resizehints = 0;    \/* 1 means respect size hints in tiled resizals *\/ static const int lockfullscreen = 1; \/* 1 will force focus on the fullscreen window *\/  static const Layout layouts[] = { \/* symbol     arrange function *\/ \/\/ \ue0b1 \u2507 { \"\u2507 \uf009  \u2507\",  spiral  },  { \"\u2507 \uf009  \u2507\",      tile },    \/* first entry is default *\/ { \"\u2507 ?  \u2507\",      NULL },    \/* no layout function means floating behavior *\/ { \"\u2507 ?  \u2507\",      monocle }, { \"\u2507 \ueb7f  \u2507\",   dwindle } };  \/* key definitions *\/ #define MODKEY Mod4Mask #define TAGKEYS(KEY,TAG) \\ { MODKEY,                       KEY,      view,           {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 &lt;&lt; TAG} }, \\ { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 &lt;&lt; TAG} },  \/* helper for spawning shell commands in the pre dwm-5.0 fashion *\/ #define SHCMD(cmd) { .v = (const char*[]){ \"\/bin\/bash\", \"-c\", cmd, NULL } }  #include &lt;X11\/XF86keysym.h> #define XF86XK_AudioLowerVolume0x1008FF11   \/* Volume control down        *\/ #define XF86XK_AudioMute0x1008FF12   \/* Mute sound from the system *\/ #define XF86XK_AudioRaiseVolume0x1008FF13   \/* Volume control up *\/  \/* commands *\/ static char dmenumon[2] = \"0\"; \/* component of dmenucmd, manipulated in spawn() *\/ \/\/ static const char *dmenucmd[] = { \"dmenu_run\", \"-m\", dmenumon, \"-fn\", dmenufont, \"-nb\", col_gray1, \"-nf\", col_gray3, \"-sb\", col_cyan, \"-sf\", col_gray4, NULL }; static const char *dmenucmd[] = { \"dmenu_run\", \"-m\", dmenumon, \"-fn\", dmenufont, NULL }; \/\/ static const char *termcmd[]  = { \"st\", \"-n\", \"spterm\", \"-g\", \"120x34\", NULL }; static const char *termcmd[] = { \"alacritty\", NULL }; static const char *screenshot[] = { \"scrot\", \"-F\", \"\/home\/okulus\/img\/screenshot_%H:%M:%S.png\", NULL };  static const Key keys[] = { \/* modifier                     key        function        argument *\/ { MODKEY,                       XK_d,      spawn,          {.v = dmenucmd } }, { MODKEY,                       XK_Return, spawn,          {.v = termcmd } }, { MODKEY,                       XK_b,      togglebar,      {0} }, { MODKEY,                       XK_j,      focusstack,     {.i = +1 } }, { MODKEY,                       XK_k,      focusstack,     {.i = -1 } }, { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } }, { MODKEY,                       XK_p,      incnmaster,     {.i = -1 } }, { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} }, { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} }, { MODKEY,                       XK_Return, zoom,           {0} }, { MODKEY,                       XK_Tab,    view,           {0} }, { MODKEY,                       XK_q,      killclient,     {0} }, { MODKEY,                       XK_t,      setlayout,      {.v = &amp;layouts[0]} }, { MODKEY,                       XK_f,      setlayout,      {.v = &amp;layouts[1]} }, { MODKEY,                       XK_m,      setlayout,      {.v = &amp;layouts[2]} }, { MODKEY,                       XK_space,  setlayout,      {0} }, { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} }, { 0,                            XF86XK_AudioMute,     spawn,                 SHCMD(\"pactl set-sink-mute 0 toggle &amp;&amp; dunstvol\") }, { 0,                            XF86XK_AudioLowerVolume,     spawn,          SHCMD(\"pactl set-sink-volume 0 -3% &amp;&amp; dunstvol\") }, { 0,                            XF86XK_AudioRaiseVolume,     spawn,          SHCMD(\"pactl set-sink-volume 0 +3% &amp;&amp; dunstvol\") },     { 0,                            XK_Print,  spawn,          {.v = screenshot} }, { MODKEY,                       XK_0,      view,           {.ui = ~0 } }, { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } }, { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } }, { MODKEY,                       XK_period, focusmon,       {.i = +1 } }, { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } }, { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } }, TAGKEYS(                        XK_1,                      0) TAGKEYS(                        XK_2,                      1) TAGKEYS(                        XK_3,                      2) TAGKEYS(                        XK_4,                      3) TAGKEYS(                        XK_5,                      4) TAGKEYS(                        XK_6,                      5) TAGKEYS(                        XK_7,                      6) TAGKEYS(                        XK_8,                      7) TAGKEYS(                        XK_9,                      8) { MODKEY|ShiftMask, XK_q, quitprompt, {0} }, };  \/* button definitions *\/ \/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin *\/ static const Button buttons[] = { \/* click                event mask      button          function        argument *\/ { ClkLtSymbol,          0,              Button1,        setlayout,      {0} }, { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &amp;layouts[2]} }, { ClkWinTitle,          0,              Button2,        zoom,           {0} }, { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } }, { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} }, { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} }, { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} }, { ClkTagBar,            0,              Button1,        view,           {0} }, { ClkTagBar,            0,              Button3,        toggleview,     {0} }, { ClkTagBar,            MODKEY,         Button1,        tag,            {0} }, { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} }, };  <\/code><\/pre>\n<p>\u041c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 slstatus:<\/p>\n<pre><code class=\"cpp\">\/* See LICENSE file for copyright and license details. *\/  \/* interval between updates (in ms) *\/ const unsigned int interval = 1000;  \/* text to show if no value can be retrieved *\/ static const char unknown_str[] = \"n\/a\";  \/* maximum output string length *\/ #define MAXLEN 2048  \/*  * function            description                     argument (example)  *  * battery_perc<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-361136","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=361136"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361136\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=361136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=361136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=361136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}