<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kepi's Blog]]></title><description><![CDATA[Notes about my random experiences with Linux, Emacs, Development and Tinkering]]></description><link>https://kepi.cz</link><generator>GatsbyJS</generator><lastBuildDate>Sat, 25 Jun 2022 13:24:14 GMT</lastBuildDate><item><title><![CDATA[Surface Go 2 and LTE modem (updated)]]></title><link>https://kepi.cz/surface-go-2-lte-modem</link><guid isPermaLink="false">https://kepi.cz/surface-go-2-lte-modem</guid><pubDate>Sat, 16 Apr 2022 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I might have been little too eager to have Linux running when I got my hands on a new &lt;i&gt;Surface Go 2&lt;/i&gt; tablet.&lt;/p&gt;&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;/static/surface-go-2-lte-modem-f0f1afb0a0b9f98081d635f9d75a22ae.jpg&quot;&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;As my &lt;i&gt;Surface&apos;s&lt;/i&gt; main job is to support me when I&apos;m away from home, a connectivity is a must. Fortunately my model has LTE modem built-in. My hopes were it would be enough to just insert SIM with data plan and be done.&lt;/p&gt;&lt;p&gt;SIM inserted, clicked on &lt;i&gt;nm-applet&lt;/i&gt; and... nothing. Just usual Wi-Fi networks from neighbors. Still optimistic, my first steps were to consult amazing &lt;a href=&quot;https://github.com/linux-surface/linux-surface/wiki/Surface-Go-2&quot;&gt;linux-surface&lt;/a&gt; project. It already helped me getting &lt;i&gt;Surface&lt;/i&gt; up and running in no time.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Enabling the modem&lt;/h2&gt;&lt;p&gt;There is &lt;a href=&quot;https://github.com/linux-surface/linux-surface/wiki/Surface-Go-2#enabling-the-lte-modem&quot;&gt;dedicated section&lt;/a&gt; for enabling LTE modem and now I see it. There is some bug which is causing the modem to disappear sometimes or doesn&apos;t appear at all.&lt;/p&gt;&lt;p&gt;I modified it a little and removed restart for &lt;code&gt;ModemManager&lt;/code&gt; (which was useful later) and stored it to &lt;code&gt;/usr/local/bin/lte-modem-fix&lt;/code&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot;&gt;readonly&lt;/span&gt; CDC_NCM_DIR=/sys/bus/usb/devices/2-3/2-3:1.0/net/wwp0s20f0u3/cdc_ncm

&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; val &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; 16383 16384; &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; max &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; rx_max tx_max; &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot;&gt;$val&lt;/span&gt;&quot;&lt;/span&gt; | sudo tee &lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot;&gt;${CDC_NCM_DIR}&lt;/span&gt;/&lt;span class=&quot;hljs-variable&quot;&gt;${max}&lt;/span&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;done&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Don&apos;t forget to set it executable &lt;code&gt;sudo chmod 0755 /usr/local/bin/lte-modem-fix&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Ok, so lets try it:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; lte-modem-fix&lt;/span&gt;
16383
16383
16384
16384
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; systemctl restart ModemManager.service&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It seems OK, no errors. But still nothing, I can&apos;t connect to my provider. Let&apos;s double check the instructions... and here it is. One small paragraph almost at the end of the instructions which crashed my hopes:&lt;/p&gt;&lt;blockquote&gt;If the script contains the correct interface name and USB device ID for your
modem, but the modem is still not showing up in ModemManager, then reboot into
Windows 10 and make sure that the LTE modem is configured to use your SIM card
and not the eSIM. Then reboot into Linux and run the above script again.&lt;/blockquote&gt;&lt;p&gt;It looks like &lt;i&gt;Surface Go 2&lt;/i&gt; LTE modem has support not only for normal SIM but also for &lt;a href=&quot;https://en.wikipedia.org/wiki/ESIM&quot;&gt;eSIM&lt;/a&gt;. Which sound really great, it might came handy when eSIMs will be thing here. Not so great is the fact that eSIM is the default. And according to the paragraph above I simply have to boot to Windows to change it. Which would be really easy if I had dual boot. Or knew that before I wiped the Windows and installed Linux.&lt;/p&gt;&lt;p&gt;I started searching around and ultimately found &lt;a href=&quot;https://github.com/jakeday/linux-surface/issues/306#issuecomment-812843988&quot;&gt;LTE/4G/mobile support&lt;/a&gt; issue on &lt;code&gt;jakeday/linux-surface&lt;/code&gt; kernel page (which is mentioned in wiki instructions and I overlooked it apparently). I tried to ask there if anybody succeeded to enable it from Linux but doesn&apos;t seem so.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Experiments&lt;/h2&gt;&lt;p&gt;Ok, so I have to install Windows, switch the SIM and install/restore Linux again. Not happening, I rather tether LTE through my phone than doing such tedious tasks.&lt;/p&gt;&lt;p&gt;First idea was to check for modem documentation. There might be something useful. According to the &lt;i&gt;linux-surface&lt;/i&gt; wiki the model is &lt;a href=&quot;https://www.qualcomm.com/products/snapdragon-modems-4g-lte-x16&quot;&gt;Qualcomm Snapdragon X16&lt;/a&gt;. Unfortunately nothing interesting there. I found some scraps from manufacturers of this model&apos;s hardware implementations, but nothing really useful.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;AT commands, mmcli and ModemManager&lt;/h3&gt;&lt;p&gt;Next I tried to play with &lt;i&gt;ModemManager&lt;/i&gt; and its &lt;code&gt;mmcli&lt;/code&gt;. At that moment I also realized, that this is a modem, isn&apos;t it? What about &lt;i&gt;AT commands&lt;/i&gt;?&lt;/p&gt;&lt;p&gt;First let&apos;s check if we have a modem. &lt;code&gt;mmcli&lt;/code&gt; is showing the modem correctly:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo mmcli -L&lt;/span&gt;
   /org/freedesktop/ModemManager1/Modem/0 [Surface] Surface&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To send &lt;i&gt;AT commands&lt;/i&gt; you have to start &lt;i&gt;ModemManager&lt;/i&gt; in debug mode apparently.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;sudo systemctl stop ModemManager
~/bin/lte_model_fix.sh
sleep 5
sudo ModemManager --debug&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Oh my, why I didn&apos;t try this before? There is so much interesting stuff in &lt;i&gt;ModemManager&lt;/i&gt; log. Most messages just stating that things are not working but there are also technical terms I can search for later!&lt;/p&gt;&lt;p&gt;This &lt;i&gt;AT command&lt;/i&gt; might help with switching SIM:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo mmcli --modem=/org/freedesktop/ModemManager1/Modem/0 --&lt;span class=&quot;hljs-built_in&quot;&gt;command&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;ATIANTSEL?&quot;&lt;/span&gt;&lt;/span&gt;
error: command failed: &apos;GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Connected: No AT port available to run command&apos;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But it looks like there is no &lt;i&gt;AT port&lt;/i&gt; available. Either the modem doesn&apos;t support &lt;i&gt;AT commands&lt;/i&gt; entered this way or I&apos;m doing something wrong.&lt;/p&gt;&lt;p&gt;I spent at least half an hour trying to convince it to obey me but - probably lacking authority - it was ultimately a dead end.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Let&apos;s learn more&lt;/h3&gt;&lt;p&gt;Anyway thanks to debug mode of &lt;i&gt;ModemManager&lt;/i&gt;, I observed something about &lt;i&gt;MBIM&lt;/i&gt; and &lt;i&gt;QMI&lt;/i&gt;. After some digging and reading detailed, but ultimately not so useful documents (i.e. &lt;a href=&quot;https://docs.microsoft.com/en-us/windows-hardware/drivers/network/mb-multi-sim-operations&quot;&gt;MB Multi-SIM operations&lt;/a&gt; at Microsoft&apos;s Doc), I ended up with important discovery. Which I should have found out much sooner :)&lt;/p&gt;&lt;p&gt;Quoting from &lt;a href=&quot;https://gist.github.com/Juul/e42c5b6ec71ce11923526b36d3f1cb2c&quot;&gt;this gist&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;MBIM, or Mobile Broadband Interface Model, is an official USB standard created by the USB Implementors Forum.

QMI or Qualcomm Mobile Station Modem Interface was developed by Qualcomm and is only supported by Qualcomm chips.&lt;/blockquote&gt;&lt;p&gt;&lt;i&gt;QMI&lt;/i&gt; is for &lt;i&gt;Qualcomm&lt;/i&gt;, I have &lt;i&gt;Qualcomm&lt;/i&gt;, maybe this interface might be supported in Linux somehow?&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;QMI&lt;/h3&gt;&lt;p&gt;And yes, it is. There is library &lt;code&gt;libqmi&lt;/code&gt;, CLI tool &lt;code&gt;qmicli&lt;/code&gt; and couple more projects around. And what&apos;s best, it seems I have &lt;code&gt;qmicli&lt;/code&gt; already installed as dependency of something else, probably the &lt;i&gt;ModemManager&lt;/i&gt;.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;kepi@midget ~ $ yay libqmi
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; yay libqmi&lt;/span&gt;
4 aur/libqmi-git 1.23.1+68+ga48f7ee-1 (+0 0.00)
    QMI modem protocol helper library
3 aur/libqmi-qmi-over-mbim-netctl 1.0.0-4 (+2 0.00)
    QMI modem protocol helper library with experimental qmi-over-mbim patch
2 aur/libqmi-qmi-over-mbim latest-1 (+3 0.00) (Orphaned) (Out-of-date: 2016-08-12)
    QMI modem protocol helper library with experimental qmi-over-mbim patch
1 extra/libqmi 1.26.8-1 (1.7 MiB 33.3 MiB) (Installed)
    QMI modem protocol helper library
==&gt; Packages to install (eg: 1 2 3, 1-3 or ^4)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are saving space like me (just found out I don&apos;t have &lt;code&gt;man&lt;/code&gt; on &lt;i&gt;Surface&lt;/i&gt;), you can find it online: &lt;a href=&quot;https://www.freedesktop.org/software/libqmi/man/latest/qmicli.1.html&quot;&gt;qmicli.1&lt;/a&gt;. And it&apos;s interesting reading, there are arguments mentioning slots, slot statuses etc. This might be it.&lt;/p&gt;&lt;p&gt;From what I found modem should be available at &lt;code&gt;/dev/cdc-wdm0&lt;/code&gt; device and &lt;code&gt;qmicli&lt;/code&gt; should be able to interact with it.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; qmicli -d /dev/cdc-wdm0 --get-service-version-info&lt;/span&gt;
error: couldn&apos;t open the QmiDevice: Cannot open device file &apos;/dev/cdc-wdm0&apos;: Permission denied
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --get-service-version-info&lt;/span&gt;
error: couldn&apos;t open the QmiDevice: Operation timed out: device is closed&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Weird, &lt;strong&gt;the device is closed&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;I don&apos;t want to bother you with dozens attempts which almost succeeded so many times. Fortunately, small steps, I was progressing and found out that:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;qmicli&lt;/code&gt; can work in &lt;i&gt;MBIM&lt;/i&gt; mode, nice, we have two protocols available which&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;might help us achieving our goal&lt;/p&gt;&lt;ul&gt;&lt;li&gt;playing around, I often ended up with stuck modem and nothing shown up in &lt;code&gt;mmcli -L&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Modem Manager&lt;/i&gt; starts &lt;code&gt;mbim-proxy&lt;/code&gt; which hold&apos;s the modem device open&lt;/li&gt;&lt;li&gt;Stopping &lt;i&gt;Modem Manager&lt;/i&gt; doesn&apos;t stop &lt;code&gt;mbim-proxy&lt;/code&gt;&lt;/li&gt;&lt;li&gt;If you kill &lt;code&gt;mbim-proxy&lt;/code&gt; it might work and you can use &lt;code&gt;qmicli&lt;/code&gt;. Sometimes... And sometimes it is stuck.&lt;/li&gt;&lt;li&gt;Finally &lt;code&gt;qmicli&lt;/code&gt; can use &lt;code&gt;mbim-proxy&lt;/code&gt; so you don&apos;t have to bother trying to find way how to stop&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If your &lt;code&gt;mmcli -L&lt;/code&gt; doesn&apos;t look like following snippet, just try your &lt;code&gt;lte-modem-fix&lt;/code&gt; script to &quot;revive&quot; the modem.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo mmcli -L&lt;/span&gt;
   /org/freedesktop/ModemManager1/Modem/0 [Surface] Surface&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Switching SIM slot&lt;/h2&gt;&lt;p&gt;One of first options I found was something with &lt;i&gt;SIM Power&lt;/i&gt;. Maybe slot isn&apos;t powered and that is why &lt;i&gt;ModemManager&lt;/i&gt; can&apos;t switch to it?&lt;/p&gt;&lt;p&gt;Without looking, I blind shot and tried to power on SIM 2 (do not do that at home):&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-sim-power-on=2&lt;/span&gt;
[/dev/cdc-wdm0] Successfully performed SIM power on&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It did something, but meanwhile I discovered more interesting argument in manual &lt;code&gt;--uim-get-card-status&lt;/code&gt; and realized, that &lt;i&gt;SIM 2&lt;/i&gt; wasn&apos;t what I need:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-get-card-status&lt;/span&gt;
[/dev/cdc-wdm0] Successfully got card status
Provisioning applications:
        Primary GW:   session doesn&apos;t exist
        Primary 1X:   session doesn&apos;t exist
        Secondary GW: session doesn&apos;t exist
        Secondary 1X: session doesn&apos;t exist
Slot [1]:
        Card state: &apos;present&apos;
        UPIN state: &apos;not-initialized&apos;
                UPIN retries: &apos;0&apos;
                UPUK retries: &apos;0&apos;
Slot [2]:
        Card state: &apos;error: no-atr-received (3)&apos;
        UPIN state: &apos;not-initialized&apos;
                UPIN retries: &apos;0&apos;
                UPUK retries: &apos;0&apos;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It looks like eSIM is &lt;i&gt;Slot 2&lt;/i&gt; and our SIM is in &lt;i&gt;Slot 1&lt;/i&gt;. It&apos;s present, but not initialized.&lt;/p&gt;&lt;p&gt;Let&apos;s use another argument, &lt;code&gt;--uim-switch-slot&lt;/code&gt; and try to switch to the first slot:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-switch-slot=1&lt;/span&gt;
[/dev/cdc-wdm0] Successfully switched slots&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now holding my breath...&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-get-card-status&lt;/span&gt;
[/dev/cdc-wdm0] Successfully got card status
Provisioning applications:
        Primary GW:   session doesn&apos;t exist
        Primary 1X:   session doesn&apos;t exist
        Secondary GW: session doesn&apos;t exist
        Secondary 1X: session doesn&apos;t exist
Slot [1]:
        Card state: &apos;present&apos;
        UPIN state: &apos;not-initialized&apos;
                UPIN retries: &apos;0&apos;
                UPUK retries: &apos;0&apos;
        Application [1]:
                Application type:  &apos;usim (2)&apos;
                Application state: &apos;detected&apos;
                Application ID:
                        A0:00:00:00:87:10:02:F4:20:F0:01:89:00:00:01:FF
                Personalization state: &apos;unknown&apos;
                UPIN replaces PIN1: &apos;no&apos;
                PIN1 state: &apos;not-initialized&apos;
                        PIN1 retries: &apos;0&apos;
                        PUK1 retries: &apos;0&apos;
                PIN2 state: &apos;not-initialized&apos;
                        PIN2 retries: &apos;0&apos;
                        PUK2 retries: &apos;0&apos;
        Application [2]:
                Application type:  &apos;unknown (0)&apos;
                Application state: &apos;detected&apos;
                Application ID:
                        A0:00:00:00:63:50:4B:43:53:2D:31:35
                Personalization state: &apos;unknown&apos;
                UPIN replaces PIN1: &apos;no&apos;
                PIN1 state: &apos;not-initialized&apos;
                        PIN1 retries: &apos;0&apos;
                        PUK1 retries: &apos;0&apos;
                PIN2 state: &apos;not-initialized&apos;
                        PIN2 retries: &apos;0&apos;
                        PUK2 retries: &apos;0&apos;
Slot [2]:
        Card state: &apos;error: no-atr-received (3)&apos;
        UPIN state: &apos;not-initialized&apos;
                UPIN retries: &apos;0&apos;
                UPUK retries: &apos;0&apos;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Whoa, it worked??&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Update - Primary Gw says session doesn&apos;t exist&lt;/h2&gt;&lt;p&gt;I&apos;m not sure why, but this wasn&apos;t all. During my experiments I probably did something wrong and ended up with &lt;code&gt;session doesn&apos;t exist&lt;/code&gt; in &lt;i&gt;Primary GW&lt;/i&gt; and &lt;i&gt;Application state&lt;/i&gt; for &lt;i&gt;Application [1]&lt;/i&gt; was &lt;code&gt;detected&lt;/code&gt; instead &lt;code&gt;ready&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;What is even weirder, modem isn&apos;t working even in Windows in this state. I recently tried Win2Go to be able to update firmware but Windows states only &lt;i&gt;Insert SIM&lt;/i&gt; without any possibility to actually do anything.&lt;/p&gt;&lt;p&gt;Anyway, I found handy &lt;a href=&quot;https://gist.github.com/calebccff/bf051fbae9377a1b7a210b891c894bd6&quot;&gt;sdm845-modem-prepare.sh&lt;/a&gt; gist. It is intended for different modem, but worked just the same. Here with small modifications:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; systemctl stop Modemamanager &lt;span class=&quot;hljs-comment&quot;&gt;# to be sure that something is not blocking the device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; AID=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;while&lt;/span&gt; [ -z &lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot;&gt;$AID&lt;/span&gt;&quot;&lt;/span&gt; ]; &lt;span class=&quot;hljs-keyword&quot;&gt;do&lt;/span&gt; AID=$(sudo qmicli -d /dev/cdc-wdm0 --uim-get-card-status | grep -E &lt;span class=&quot;hljs-string&quot;&gt;&quot;([A-Z0-9]{2}:){15}[A-Z0-9]{2}&quot;&lt;/span&gt; | xargs); sleep 2; &lt;span class=&quot;hljs-keyword&quot;&gt;done&lt;/span&gt;; &lt;span class=&quot;hljs-built_in&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;$AID&lt;/span&gt;&lt;/span&gt;
A0:00:00:00:87:10:02:FF:47:F0:01:89:00:00:01:FF
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo qmicli -d /dev/cdc-wdm0 --uim-change-provisioning-session=&lt;span class=&quot;hljs-string&quot;&gt;&quot;slot=1,activate=yes,session-type=primary-gw-provisioning,aid=&lt;span class=&quot;hljs-variable&quot;&gt;$AID&lt;/span&gt;&quot;&lt;/span&gt;&lt;/span&gt;
[/dev/cdc-wdm0] Successfully changed provisioning session&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And now, it looks really promising:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;[/dev/cdc-wdm0] Successfully got card status
Provisioning applications:
	Primary GW:   slot &apos;1&apos;, application &apos;1&apos;
	Primary 1X:   session doesn&apos;t exist
	Secondary GW: session doesn&apos;t exist
	Secondary 1X: session doesn&apos;t exist
Slot [1]:
	Card state: &apos;present&apos;
	UPIN state: &apos;not-initialized&apos;
		UPIN retries: &apos;0&apos;
		UPUK retries: &apos;0&apos;
	Application [1]:
		Application type:  &apos;usim (2)&apos;
		Application state: &apos;ready&apos;
		Application ID:
			A0:00:00:00:87:10:02:FF:47:F0:01:89:00:00:01:FF
		Personalization state: &apos;ready&apos;
		UPIN replaces PIN1: &apos;no&apos;
		PIN1 state: &apos;disabled&apos;
			PIN1 retries: &apos;3&apos;
			PUK1 retries: &apos;10&apos;
		PIN2 state: &apos;enabled-not-verified&apos;
			PIN2 retries: &apos;3&apos;
			PUK2 retries: &apos;10&apos;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Finally connected&lt;/h2&gt;&lt;p&gt;With connection named &lt;i&gt;O2&lt;/i&gt; in place (you can set it up i.e. with Network Manager&apos;s connection editor):&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; nmcli con up O2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;/static/nmcli_lte_modem_o2-a16850fc16c36eee8b579175673b3c96.png&quot;&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;Yes!&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Bonus: lte-modem-fix on boot&lt;/h2&gt;&lt;p&gt;I really don&apos;t want to use &lt;code&gt;lte-modem-fix&lt;/code&gt; manually after every restart, lets set up Systemd timer to automate it. All credits to &lt;a href=&quot;https://github.com/solarfl4re&quot;&gt;solarfl4re&lt;/a&gt; for his &lt;a href=&quot;https://github.com/jakeday/linux-surface/issues/306#issuecomment-817067181&quot;&gt;post&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;First create file &lt;code&gt;/etc/systemd/system/surfacego2-modemfix.service&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-conf&quot;&gt;[Unit]
Description=Properly initialize Qualcomm X16 modem

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/sh /usr/local/bin/lte-modem-fix
ExecStartPost=systemctl restart ModemManager.service&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And than matching timer in &lt;code&gt;/etc/systemd/system/surfacego2-modemfix.timer&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-conf&quot;&gt;[Unit]
Description=Start the service to fix the Surface modem with a delay

[Timer]
OnBootSec=15sec

[Install]
WantedBy=timers.target&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Don&apos;t forget to reload systemd and enable the timer.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-shell&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo systemctl daemon-reload&lt;/span&gt;
&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; sudo systemctl &lt;span class=&quot;hljs-built_in&quot;&gt;enable&lt;/span&gt; /etc/systemd/system/surfacego2-modemfix.timer&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Recap&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;Prepare your &lt;code&gt;lte-modem-fix&lt;/code&gt; script.&lt;/li&gt;&lt;li&gt;Check if the LTE modem is available with &lt;code&gt;sudo mmcli -L&lt;/code&gt;. Use &lt;code&gt;lte-modem-fix&lt;/code&gt; if not and check again (it will take the modem couple seconds to appear).&lt;/li&gt;&lt;li&gt;Check SIM card status with: &lt;code&gt;sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-get-card-status&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Switch to slot 1 with &lt;code&gt;sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --device-open-mbim --uim-switch-slot=1&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If it isn&apos;t working, take a look at &lt;i&gt;Update - Primary Gw says session doesn&apos;t exist&lt;/i&gt; chapter above. It might help you.&lt;/p&gt;&lt;p&gt;Really long road and many hours spent to discover that single command did the trick :) I hope my struggles might help anyone a little.&lt;/p&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Rozjíždíme Skoro Chytrej Barák - díl 0.]]></title><link>https://kepi.cz/skoro-chytrej-barak-0</link><guid isPermaLink="false">https://kepi.cz/skoro-chytrej-barak-0</guid><pubDate>Fri, 03 Sep 2021 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Taky už vás někdy v posteli napadlo, že by bylo super moct zhasnout v kuchyni a nemuset se při tom zvedat? Nebo, že by se vlastně mohlo zhasnout samo, když si nastavujete budík a usínáte? A co takhle to zvládnout bez toho, aby jste museli upsat duši ďáblu nebo sdílet svá data Googlu, Applu, Samsungu nebo soudruhům v Xiaomi?&lt;/p&gt;&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;/static/skoro-chytrej-barak-0-f42a5408110fb39bc45ffef863303e1a.jpg&quot;&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;Před pár lety mě, v podstatě jen tak ze zvědavosti, napadlo, že bych si vlastně chtěl vyzkoušet nějakou &quot;automatizaci&quot; domu. Nevěděl jsem nejen kde začít, ale vůbec ani jaké jsou možnosti. Když to ale tři roky zpátky začalo vypadat, že budeme stavět dům, rozhodl jsem se do toho vrhnout po hlavě.&lt;/p&gt;&lt;p&gt;A tak vznikl náš projekt &lt;i&gt;ChytroBarák&lt;/i&gt;, nazvaný tak pracovně na protest proti nadužívání buzzwordů typu &lt;i&gt;Smart&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;Tahle série je vlastně cestou za dosažení rozumnějšího ovládání domu. Náš dům se tak sice nestane chytřejší, bude ale o fous pohodlnější a my se v průběhu něco naučíme, a to se nikdy neztratí. Dnešní nultý díl pak berte jako nutné zlo, které nám stanoví základní pravidla hry a usnadní budoucí rozhodování.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Čeho chci dosáhnout?&lt;/h2&gt;&lt;p&gt;Chci bydlet v domě, který lze &lt;strong&gt;rozumně ovládat&lt;/strong&gt;. Nejen tím, že dojdu k vypínači, ale třeba z mobilu, když jsem línej vstát. Nebo zhasnout z práce, když zapomenu rozsvíceno.&lt;/p&gt;&lt;p&gt;Chci mít dům, ve kterém se zbytečně netopí, když jsem na dovolené. Který umí stáhnout všechny žaluzie naráz a natočit je třeba podle slunka. Dům, který sám zhasne světla, když si pustím film.&lt;/p&gt;&lt;p&gt;Chci, aby se rekuperace přepnula na recirkulaci, když zatopím v kamnech. A zase začala větrat, když dochází čerstvý vzduch.&lt;/p&gt;&lt;p&gt;Chci vědět, kde máme otevřená okna, kolik je stupňů v každé místnosti, kolik jsme propálili elektřiny a proteklo vody.&lt;/p&gt;&lt;p&gt;Chci se &lt;strong&gt;naučit nové věci&lt;/strong&gt;, experimentovat a postupně vše vylepšovat. *Když chci, ne když musím.* Chci, abychom mohli snadno změnit vše, co nám nevyhovuje. Bez zbytečných omezení.&lt;/p&gt;&lt;p&gt;A hlavně to všechno chci bez toho, abych musel za komfort platit daty o své rodině. Bez toho, abych byl závislý na nějaké firmě.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Pro koho je tato série?&lt;/h2&gt;&lt;p&gt;Pro ty, kteří plánují nové bydlení a chtějí převzít kontrolu nad jeho &quot;smart&quot; částí, ale moc neví jak na to. Zkrátka snad nepřijdou ani ti, kteří už bydlení mají a jen se snaží ovládání přidat. Jen to bude možná o fous složitější, možná nepůjde úplně všechno a budete muset více vrtat. :)&lt;/p&gt;&lt;p&gt;Pro ty, kteří se sice nechtějí do řešení pouštět sami, ale rádi by o něco víc rozuměli možnostem a mohli realizátorům říct přesně to, co potřebují.&lt;/p&gt;&lt;p&gt;Asi ne pro ty se &lt;i&gt;smart&lt;/i&gt; technologiemi zkušenější. Možná najdete něco, co se bude hodit, ale nejsem žádný expert. Něco málo už vím, něco málo mi funguje, ale sotva udržím pojmy a řeším svůj první dům, ne desátý.&lt;/p&gt;&lt;p&gt;A těm z vás, kteří se rozhodli kontrolu nějakému populárnímu hotovému řešení, možná jen ukážu, kolik jste si ušetřili času a starostí. :) Pro ty šťastné snad navždy. A pro ty méně šťastné aspoň do doby, než ukončí vaši produktovou řadu nebo zkrachuje firma a s ní i cloud, přes který váš dům ovládáte.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Co jsem na začátku věděl já&lt;/h2&gt;&lt;p&gt;Živím se jako linuxový administrátor a programátor. Software tedy nějak rozumím, s hardware už je to ale o fous horší a elektřina pro mě je (nebo alespoň na začátku byla) španělskou vesnicí. I přesto, že doma rád kutím, rozhodně nejsem všeuměl, kterýmu stačí mrknout a ví. Všechno nakonec vyřeším, ale nejdřív musím hodně dlouho číst a sledovat, abych to pochopil.&lt;/p&gt;&lt;p&gt;Z fyziky, kterou jsem měl naposledy na střední (a ještě k tomu jen jeden rok), si pamatuji pouze to, že &quot;elektromotory jsou točivé stroje, které přeměňují energii elektrickou na energii mechanickou&quot;. Jestli si to pamatuji správně, to netuším. A to je opravdu všechno, i když tomu někteří nechtějí věřit.&lt;/p&gt;&lt;p&gt;Nikdy předtím jsem neviděl rozvaděč bez krytu. A ten s krytem byl ten s pojistkami v paneláku.&lt;/p&gt;&lt;blockquote&gt;Na začátku jsem prostě netušil, co to je svorka (natož Wago), fíčko,
stykač nebo DIN lišta. Netušil jsem, že budu potřebovat rozvaděč, kolik v něm
bude třeba místa, jak tam vlastně povedou všechny ty káblíky, jak zapojit relé,
kdo ho má zapojit...&lt;/blockquote&gt;&lt;p class=&quot;noshadow&quot;&gt;&lt;figure&gt;&lt;img src=&quot;/static/ficko-bed84bcf40a785cde63c35a2fa85436d.png&quot; class=&quot;noshadow&quot;&gt;&lt;figcaption&gt;Proudový chráníč aneb lidově Fíčko. Autor: Arenachristian, CC BY-SA 4.0.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;S čím počítat, když se do toho chci pustit?&lt;/h2&gt;&lt;p&gt;Co vás takovej Chytrej barák bude stát? Na co dalšího se připravit?&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Peníze&lt;/h3&gt;&lt;p&gt;Peníze jsou vlastně to nejmenší. Bude jich to všechno stát docela dost, rozhodně ale míň, než když si pořídíte vše např. od Loxone.&lt;/p&gt;&lt;p&gt;O to víc vás to bude stát času. Pokud rozumně vyděláváte, je rozhodně levnější zaplatit někoho, kdo vám vše udělá. A třeba si jen sami přesně říct, jak to chcete.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Zábava&lt;/h3&gt;&lt;p&gt;Pokud je jeden z důvodů, proč o vlastním Chytrým baráku přemýšlíte prostě to, že vás baví s něčím experimentovat, máte vyhráno.&lt;/p&gt;&lt;p&gt;Nejen že ušetříte za drahé řešení a realizační firmy, ale ještě k tomu i za kina, výlety s rodinou a hry na Steamu. Volný čas totiž strávíte v rozvaděči, taháním kabelů nebo třeba debugováním MQTT zpráv.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Sem tam se to rozbije&lt;/h3&gt;&lt;p&gt;Asi je docela jedno, jak moc budete pečliví, sem tam se prostě něco pokazí. A dle Murphyho zákonů samozřejmě ve chvíli, kdy se to nejméně hodí.&lt;/p&gt;&lt;p&gt;Je potřeba, abyste s tím počítali vy i rodina. Nefunkční vypínače jsou výrazně menší problém, když každý ví, kde je nachystaná čelovka. ;)&lt;/p&gt;&lt;p&gt;Je tu ale i pozitivní stránka. Sem tam se rozbijí i komerční řešení a na rozdíl od nich, to své si zvládnu kdykoliv opravit.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;FAF - Family Acceptance Factor&lt;/h3&gt;&lt;p&gt;Naprosto jasná věc, alespoň při pohledu ve zpětném zrcátku. Na začátku jsem ale byl tak nadšený do toho, že bych se mohl vrtat ve vlastním domě, že mě ani nenapadlo, že v něm vlastně nebudu žít sám a že možná nebudeme úplně všichni stejně nadšení :)&lt;/p&gt;&lt;p&gt;Dejme tomu, že máte takovou typickou situaci, kdy stavíte novostavbu a chcete ji ovládat. A samozřejmě přestěhovat do nového se potřebujete hned jak dostavíte, protože nemáte na to platit hypotéku a ještě podnájem.&lt;/p&gt;&lt;p&gt;Přesně v téhle chvíli vzniká problém. Pokud dostavíte běžný dům, nastěhujete se a vše důležité jede. Pokud ale řešíte, že chcete dům nějak ovládat a ovládání si chcete řešit sami, dostanete se možná do stavu, kdy je dům hotový, a vy jste teprve vybrali ovládací jednotku. Dům stojí, vy se stěhujete, ale světla nejdou zapnout, topení netopí, žaluzie vám při montáži nechali stáhnuté, takže je tam tma a první zářijové mrazíky právě začali. Respektive tak jsme, naštěstí s výjimkou těch žaluzií, začínali my. :)&lt;/p&gt;&lt;p&gt;A zde přicházíme k FAF. Je vaše druhá polovička dobrodružná povaha a zvládne pár dní po večerech při svíčkách hrát pasiáns, zatímco vy taháte s čelovkou vodiče mezi řídící jednotkou a relátkami? Paráda, nemusíte mít připravené vše hned od prvního dne, a můžete plánovat trochu víc za chodu a zapojovat postupně.&lt;/p&gt;&lt;p&gt;Běžná realita je ale většinou úplně jiná a je potřeba dopředu rozmýšlet, co vše můžete odložit a co musí běžet hned. Přítel může např. v pohodě pochopit, že nefungují světla, ale vašich pět potomků by vás sežralo zaživa.&lt;/p&gt;&lt;p&gt;P.S. FAF jsem si vycucal z prstu jako alternativu k pojmu WAF (W jako wife), na který narazíte na všech těch Redditech, fórech a dalších internetech, aby líp odrážel realitu. Stejnou věc řeší spousta z nás ve chvíli, kdy ještě není ženatá, nebo je naopak už vdaná, nebo bydlí s babičkou, maminkou, křečkem...&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Chytrej ten barák opravdu nebude&lt;/h3&gt;&lt;p&gt;Chytrej, jako Holly, ten barák prostě nebude. Teda alespoň doufám.&lt;/p&gt;&lt;p&gt;To o čem se bavit budeme je automatizace, usnadnění ovládání a různé vychytávky. Co ale baráku neřekneme, to dělat nebude. Na co zapomeneme, to se nám většinou vymstí. A právě automatizace většinou ukážou, že to řešení je sice super, ale rozhodně ne &lt;i&gt;Smart&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;Drobný příklad z doby covidové - se stmíváním se nám automaticky rožnou (něco jako rozsvítí) světla na chodbě a nad linkou. A protože jsme vždy doma a chodíme spát různě (a na většinu populace dost pozdě), vypínáme je vždy ručně. Naprosto záměrně jsme vypínání prostě nijak neautomatizovali. A když najednou, po roce, vyrazíte na víkend za rodinou a vrátíte se ve dne do svítícího domu, hned jste chytřejší... Ještě že ty ledky tolik nežerou.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Základní filozofie / dogmata&lt;/h2&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Kaizen&lt;/h3&gt;&lt;p&gt;když si vypůjčím citaci z Wikpedie: podstata pojmu &lt;a href=&quot;https://cs.wikipedia.org/wiki/Kaizen&quot;&gt;Kaizen&lt;/a&gt; jednoduše znamená &lt;strong&gt;neustálé zlepšování&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;/static/kaizen-f1b15fba65a9530d5522d22ec544aaec.svg&quot;&gt;&lt;figcaption&gt;Japonské znaky &quot;Kai&quot; (změna), &quot;zen&quot; (dobro). Autor: Majo statt Senf, CC BY-SA 4.0.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Kaizen&lt;/i&gt; se snažím praktikovat jak v práci, tak koníčcích. Pomáhá mi vyvažovat přirozenou snahu o to, udělat vše od začátku dokonale. Snahu, která většinou ústila v jediné - nic opravdu nedodělám a když dodělám, tak o tom nikomu neřeknu, protože to ještě není dost dobré.&lt;/p&gt;&lt;p&gt;Znamená to, že vždy se budeme snažit zprovoznit nějakou část, nehledě na to, jestli to bude perfektní. A pravidelně si najdeme čas na to, abychom vylepšovali po malých krůčcích to, co ještě vylepšovat jde.&lt;/p&gt;&lt;p&gt;Při rozjíždění našeho ChytroBaráku se tenhle přístup zatím osvědčil. Kromě toho, že díky němu alespoň něco funguj, jsme ušetřili i dost peněz. Po malých krocích se totiž snáze adaptuje aktuální situaci, zvlášť když nejste na danou oblast experti s lety zkušeností.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Žádný vendor lock&lt;/h3&gt;&lt;blockquote&gt;*Vendor lock* označuje situaci, kdy v dané oblasti absolutně závisíte na
konkrétním dodavateli. Známe jej z mnoha životních oblastí, malých i velkých.&lt;/blockquote&gt;&lt;p&gt;Všichni asi v pohodě přežijeme, že si do vysavače můžeme koupit pouze originální sáček. Respektive někteří z nás si kvůli tomu raději pořídí centrální vysavač nebo nevysávají vůbec, ale to odbočuji.&lt;/p&gt;&lt;p&gt;To, co ale v našem případě ochotni přežít nejsme, je závislost u věcí, které plánujeme používat dlouhá léta, a které nelze snadno vyměnit. &lt;i&gt;ÚžasnýSmartHome(TM)&lt;/i&gt; s podporou Google Home, Alexy i smart naslouchátka pro babičku je úžasný jen do doby, než vám po pěti letech ukončí podporu. Ale nebojte, stačí jen koupit novou jednotku za pár desítek tisíc a, pro vaše pohodlí, začít platit měsíční pouze XXX měsíčně, aby vám nabídli lepší komfort. Jo a vlastně ještě musíte vyměnit žaluzie a ty vypínače už teď taky nepodporují.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Vícero technologií&lt;/h3&gt;&lt;p&gt;Naší snahou je vlastně dosáhnout opaku &lt;i&gt;Vendor Locku&lt;/i&gt;. Chceme podporovat vícero technologií tak, aby když v budoucnu něco fungovat přestane nebo už nebude dostupné, my mohli fungovat v klidu dál nebo jen s minimální investicí.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Bezpečnost&lt;/h3&gt;&lt;p&gt;Všude, kde to půjde, se budu snažit dávat důraz na bezpečnost. V současnosti se nacházíme v, z hlediska bezpečnosti technologií, asi nejšílenější době vůbec. Uživatelský komfort je jediná meta a na ničem jiném nezáleží.&lt;/p&gt;&lt;p&gt;V našem domě musí být bezpečnost na prvním místě. I přesto, že neplánuji státní převraty a vydání našich domácích diskuzí by mohlo lidstvo obohatit, nejsem v žádném případě OK s tím, aby měl někdo - byť teoretickou - možnost nahrávat vše, co se doma šustne, analyzovat kdy chodíme z práce nebo jak často chodím čůrat (na to by neměli dostatečně velké datové typy).&lt;/p&gt;&lt;p&gt;Stejně tak by nemělo být možné, aby nějaký kolemjdoucí mohl přes WiFi blikat světlama, přepálit podlahovku nebo si pro jistotu rovnou odemčít chytrý zámek na dveřích, aby nám mohl zalít kytky, protože se dočetl, že jsme na dovolené.&lt;/p&gt;&lt;p&gt;U každé zapojované technologie budeme vždy - s rozumnou mírou jistoty - vědět, že &quot;nevolá domů&quot;, kdo se k ní dostane a jak ji případně zabezpečit (pokud je to nutné).&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Cloudy&lt;/h3&gt;&lt;p&gt;Všechno ovládání musí běžet přímo v domě, vše musí fungovat i offline. Žádné cloudy výrobců. Je jedno, jestli s našimi daty nebo bez dat. Nechceme být závislí na tom, jestli za pět let výrobce zkrachuje, odpojí mu servery a my jsme třeba bez podlahovky. Nebo na tom, že je bouřka a zlobí internet.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Otevřený software&lt;/h3&gt;&lt;p&gt;Vždy preferujeme otevřený software, i když je to někdy o fous složitější. Často je to naštěstí naopak jednodušší.&lt;/p&gt;&lt;p&gt;Můžeme si tak vždy ověřit, že software dělá opravdu jen to, co má. A hlavně se pojistit pro situace, kdy se daný software přestane vyrábět. V domě chceme bydlet pěknou řádku let. Spoléhat na to, že bude pro libovolnou firmu rentabilní 20 let udržovat nějakou aplikaci, je opravdu bláhové.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Dokumentace&lt;/h3&gt;&lt;p&gt;U všeho udržujeme aktuální dokumentaci tak, aby mohl řešení přebrat v pohodě někdo jiný.&lt;/p&gt;&lt;p&gt;Nejde jen o hrůzné scénáře, kdy vás přejede autobus a váš partner nebude schopný po výpadku proudu ani rozsvítit světla. Stačí se zamyslet nad tím, že za pár let můžete chtít dům prodat (protože plánujete ChytroBarák 2.0) a kupující v něm musí fungovat.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Rozumím tomu, co jsem udělal&lt;/h3&gt;&lt;p&gt;A nakonec bod z nejdůležitějších. Pokud něco nainstaluji, zapojím, rozjedu či upravím, musím tomu rozumět. Vím, proč jsem to udělal, vím jak. Jen díky tomu pak vím, že řešení odpovídá všemu, co jsme si doposud stanovili. A jen díky tomu a dokumentaci je pak snadné opravit případné problémy.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Co příště&lt;/h2&gt;&lt;p&gt;Pokusím se, aby vyšel každý měsíc alespoň jeden nový díl. Zatím mám v hlavě následující plán (ale plány jsou od toho, aby se měnily, takže uvidíme):&lt;/p&gt;&lt;dl&gt;&lt;div&gt;&lt;dt&gt;Technologie&lt;/dt&gt;&lt;dd&gt;software i hardware, který jsem nakonec vybral a proč.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Pokusy&lt;/dt&gt;&lt;dd&gt;popis minimálního zapojení, při kterém si můžeme vyzkoušet nějakou drobnost, než začneme řešit reálné věci.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Plánujeme&lt;/dt&gt;&lt;dd&gt;dost možná více dílů o tom, co je dobré si rozmyslet dopředu. Kabely, vodiče, rozvaděč, zdroje a další.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Začínáme&lt;/dt&gt;&lt;dd&gt;zapojíme jednotku do rozvaděče a připravíme si vše na další postup.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Vypínače&lt;/dt&gt;&lt;dd&gt;zprovozníme si vypínač a první světlo.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Teploměry&lt;/dt&gt;&lt;dd&gt;rozjedeme teploměry, abychom mohli zapojit podlahovku.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Grafy&lt;/dt&gt;&lt;dd&gt;rozjedeme nějaké grafy, protože bez nich se bude vše dost špatně kontrolovat.&lt;/dd&gt;&lt;/div&gt;&lt;div&gt;&lt;dt&gt;Podlahovka v0&lt;/dt&gt;&lt;dd&gt;aneb jak ušetřit za termostaty a místo toho si koupit ovládací jednotku.&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Instalace Debian Sarge z disku s GRUB 2]]></title><description><![CDATA[Aneb jak nainstalovat Debian z Debianu.]]></description><link>https://kepi.cz/linux/sarge_instalace_grub2</link><guid isPermaLink="false">https://kepi.cz/linux/sarge_instalace_grub2</guid><pubDate>Tue, 17 Jan 2012 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Poměrně často rozjíždím nějaké vzdálené servery v serverovnách většinou někde za mořem a zkušenosti se dost různí. Jelikož na většině serverů používám LVM a mám v tom rád jakýs takýs pořádek, jsem mnohem raději, když si můžu server nainstalovat sám.&lt;/p&gt;&lt;p&gt;Bohužel běžná je situace, kdy objednáte server s přístupem přes KVM, dáte požadavek na rozjetí instalace konkrétní verze instalace, ale hlavně na to, aby vás k té instalaci v průběhu pustili… a místo toho co chcete nakonec obdržíte nadšený mail z housingu, že jsou šikovní a už to mají.&lt;/p&gt;&lt;p&gt;Možnosti se pak různí. Buď prostě pokračujete s tím co máte, nebo máte šikovné KVM, které umí nahrát remote image a přes něj si na dálku připojíte nějaké malé iso. A nebo pouze nějaké hloupé KVM či jinou remote konzoli a říkáte si co teď s tím. Šikovným řešením je rozjet instalaci přímo z disku přes grub.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Příprava stroje&lt;/h2&gt;&lt;p&gt;Nejdříve je potřeba mít nějakou partition, na kterou si data nahrajete a ta musí být pokud možno odlišná od té s přeinstalovávaným systémem. Pokud totiž vše dáte na stejnou partition, budete mít dost složitou instalaci při změně partitions.&lt;/p&gt;&lt;p&gt;Jednoduchým řešením je využití swapu. Dejme tomu, že je na /dev/sda1&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;swapoff /dev/sda1
mkfs.ext4 /dev/sda1
mkdir /newinstall
mount /dev/sda1 /newinstall&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Do adresáře nyní musíte stáhnout instalační obrazy pro grub (označeno jako hd-media) a samozřejmě i nějaký cd image, např. netinst.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; /newinstall
wget http://ftp.cz.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/initrd.gz
wget http://ftp.cz.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/hd-media/vmlinuz
wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-cd/debian-6.0.3-amd64-netinst.iso&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Následně si otevřete &lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt; a najděte, kde v něm jsou položky menuentry. Jako první přidejte&lt;/p&gt;&lt;pre class=&quot;example&quot;&gt;menuentry &apos;install&apos; --class debian --class gnu-linux --class gnu --class os {
        insmod part_gpt
        insmod ext2
        set root=&apos;(hd0,gpt1)&apos;
        linux   /vmlinuz
        initrd  /initrd.gz
}&lt;/pre&gt;&lt;p&gt;Pozor, tady se může váš zápis samozřejmě značně lišit. Zaprvé nemusíte používat gpt oddíly, zadruhé můžete mít jiný oddíl, takže dejte pozor na správné nastavení typu oddílu a správné nastavení root (běžně je např. (hd0,0) a spol). Pokud máte přístup alespoň přes konzoli, dá se situace případně později napravit ruční editací v grubu.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Končíme&lt;/h2&gt;&lt;p&gt;No a to je v podstatě vše. Stačí restartovat, stroj by měl naskočit rovnou do instalace a vy můžete pokračovat tak, jak jste zvyklí. Jen při přerozdělování disku nezapomeňte, že nesmíte smazat oddíl, na kterém máte stažené soubory.&lt;/p&gt;&lt;p&gt;A na závěr upozornění, které mělo být na začátku. Píšu to zpaměti a je možné, že je pár chybek, kontrolujte proto co děláte a snad to dopadne.&lt;/p&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Upgrade BIOSu s FreeDOS]]></title><link>https://kepi.cz/linux/upgrade-biosu-s-freedos</link><guid isPermaLink="false">https://kepi.cz/linux/upgrade-biosu-s-freedos</guid><pubDate>Fri, 07 May 2010 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Našel jsem konečně jednoduchý návod, jak si rychle nachystat bootovací CD z Linuxu s vlastními soubory, třeba právě BIOSem. Bootovací disketa je už bohužel minimálně u Supermicra minulostí, jejich BIOS má přes 4MB.&lt;/p&gt;&lt;p&gt;Takže jdeme na to. Opět to vezmu stručně, mělo by stačit copy &amp;#x26; paste. V /tmp oddílu je potřeba mít alespoň 30 až 40MB volného místa :)&lt;/p&gt;&lt;p&gt;Nejdříve si připravíme adresáře pro práci&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;mkdir /tmp/freedos/
&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; /tmp/freedos
mkdir iso biosiso&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Stáhneme si poslední mini iso pro FreeDOS.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdbasecd.iso&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Připojíme iso do připraveného adresáře a zkopírujeme si všechny soubory&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;mount -o loop fdbasecd.iso iso
cp -a iso/* biosiso/
&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; biosiso&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Teď přichází „nejtěžší“ část. Upravit vše tak, aby se namísto instalace spustil FreeDOS přímo nad naším CD a daty. Je potřeba editovat jeden soubor. Buď to můžete ručně přidat za řádek set fdosroot= nový řádek goto end nebo použijte následující sed, který by to snad měl zvládnout. Je ovšem možnost, že s novou verzí freedosu by to neprošlo, proto ponechávám info o ruční editaci.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;sed -r &lt;span class=&quot;hljs-string&quot;&gt;&quot;s/^(set fdosroot=.*)$/\1\n\ngoto end/&quot;&lt;/span&gt; setup.bat&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tím jsme skoro hotovi. Stačí nakopírovat vlastní soubory, pokud budu mít např. nový bios v souboru /tmp/bios123.zip, tak následujícím příkazem jej rozbalíme do nového adresáře bios, který bude po bootu na CD.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;unzip /tmp/bios123.zip -d bios&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nakonec je potřeba z našeho dočasného adresáře vytvořit funkční ISO soubor&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;mkisofs -o ../freedos_biosupdate.iso -q -l -N \
-boot-info-table -iso-level 4 -no-emul-boot \
-b isolinux/isolinux.bin -publisher &lt;span class=&quot;hljs-string&quot;&gt;&quot;FreeDOS - www.freedos.org&quot;&lt;/span&gt; \
-A &lt;span class=&quot;hljs-string&quot;&gt;&quot;FreeDOS with bios 123&quot;&lt;/span&gt; -V FDOS_SUPBIOS -v .&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A máte hotovo. ISO si vypalte, nabootujte na počítači, kde je potřeba. Na úvodní obrazovce zvolte 1 pro FreeDOS a následně vyberte, že chcete provést instalaci. Dále je to již jen na vás.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Magnet linky, RSS a další v GNOME a Google Chrome]]></title><link>https://kepi.cz/linux/magnet-linky-rss-a-dalsi-v-gnome-a-google-chrome</link><guid isPermaLink="false">https://kepi.cz/linux/magnet-linky-rss-a-dalsi-v-gnome-a-google-chrome</guid><pubDate>Fri, 11 Dec 2009 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Pokud jste propadli Google Chrome stejně jako já, dříve či později narazíte na potřebu otevřít některé speciální URL schémata, jako např. magnet:// nebo častější feed:// (pro RSS linky).&lt;/p&gt;&lt;p&gt;Google Chrome má mě velmi sympatickou filozofii, ponechat co jde na systému, na kterém běží a neřešit vše speciálně. Takže stejně jako například při přidávání nového certifikátu i tady se musíte vrhnout na nastavení někde hlouběji.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Přidání URL schématu v GNOME&lt;/h2&gt;&lt;p&gt;Jako většina věci, i tohle se samozřejmě dělá přes GConf. Stačí přidat správné klíče do cesty /desktop/gnome/url-handlers. Pro zjednodušení jsem si napsal krátký „skriptík“ add_url_handler, který stačí přidat někam do vaší cesty pro spouštění programů.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;#!/bin/sh&lt;/span&gt;

gconftool-2 -t string -s /desktop/gnome/url-handlers/&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;/&lt;span class=&quot;hljs-built_in&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot;&gt;$2&lt;/span&gt; %s&quot;&lt;/span&gt;
gconftool-2 -s /desktop/gnome/url-handlers/&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;/needs_terminal &lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt; -t bool
gconftool-2 -t bool -s /desktop/gnome/url-handlers/&lt;span class=&quot;hljs-variable&quot;&gt;$1&lt;/span&gt;/enabled &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;No a teď už jen zavoláte pro jaké schéma se má nastavit jaký program. Pro dvě již uvedené je to například u mě takto&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-conf&quot;&gt;add_url_handler feed liferea-add-feed
add_url_handler magnet /usr/bin/fatrat&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Aktuální větev gitu v příkazové řádce]]></title><link>https://kepi.cz/linux/aktualni-vetev-gitu-v-prikazove-radce</link><guid isPermaLink="false">https://kepi.cz/linux/aktualni-vetev-gitu-v-prikazove-radce</guid><pubDate>Wed, 28 Oct 2009 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Pokud často poletujete v příkazové řádce mezi více projekty, můžete se začít ztrácet v tom, jakou že větev máte aktivní v aktuálním adresáři.&lt;/p&gt;&lt;p&gt;Samozřejmě je možné napsat git branch pokaždé, když si nejste jisti, ale přeci jen programátoři jsou líné kůže a tak jsem si napsal drobné vylepšení.&lt;/p&gt;&lt;p&gt;Upozorňuji, že kód není zrovna optimální a v podstatě po každém příkazu znovu kontroluje, zda jste v gitu a jaká je větev, určitě by vše šlo vylepšit nějakou menší cache.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-title&quot;&gt;gitbranch&lt;/span&gt;&lt;/span&gt;() {
  &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; [ `git branch 2&gt;&amp;#x26;1| grep &lt;span class=&quot;hljs-string&quot;&gt;&apos;Not a git&apos;&lt;/span&gt; | wc -l` -eq 0 ]; &lt;span class=&quot;hljs-keyword&quot;&gt;then&lt;/span&gt;
    git branch | grep &lt;span class=&quot;hljs-string&quot;&gt;&apos;^*&apos;&lt;/span&gt; | sed -r &lt;span class=&quot;hljs-string&quot;&gt;&apos;s/^\* (.*)$/ [\1]/&apos;&lt;/span&gt;
  &lt;span class=&quot;hljs-keyword&quot;&gt;fi&lt;/span&gt;
}

&lt;span class=&quot;hljs-built_in&quot;&gt;export&lt;/span&gt; PS1=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot;&gt;$PS1&lt;/span&gt;\$(gitbranch)&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Důležitý je hlavně backslash před voláním funkce, v opačném případě by se příkaz vykonal pouze při definici proměnné a nevolal se znovu při změnách adresáře.&lt;/p&gt;&lt;p&gt;Samozřejmě dál si už můžete upravit proměnnou PS1 dle libosti, místo hranatých závorek dát cokoliv vás napadne a případně i použít nějaké barvičky.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Synchronizace kontaktů – Gmail, G1 a Mutt]]></title><link>https://kepi.cz/software/synchronizace-kontaktu-gmail-g1-a-mutt</link><guid isPermaLink="false">https://kepi.cz/software/synchronizace-kontaktu-gmail-g1-a-mutt</guid><pubDate>Sat, 12 Sep 2009 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nedávno jsem se přece jen rozhodl a pořídil si konečně mobil s linuxem. Pravda je, že nejsem velkým přítelem ukládání čehokoliv osobního u Google, ale pohodlí nakonec převážilo.&lt;/p&gt;&lt;p&gt;G1 se vás hned při prvním startu zeptá na přihlašovací údaje ke Google účtu a poté zapne automatickou synchronizaci vašich kontaktů, kalendáře a mailu. GMail jako takový nepoužívám, takže pro mě vše slouží pouze jako úložiště pro kontakty a kalendář. Velkou výhodou je to, že i při resetování telefonu nebo nahrávání nových firmware se nemusím bát o své kontakty, vždy pak stačí pouze syncnout.&lt;/p&gt;&lt;p&gt;Nastavení synchronizace Google kontaktů a kalendáře s Evolution byla hračka, jenže většinu času používám pro mail Mutt a za chvíli přišla na řadu otázka, jestli by náhodou nešly kontakty i do něj.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Synchronizace kontaktů&lt;/h2&gt;&lt;p&gt;Ke Gmailu a dalším službám je věřejně dostupné API a právě toho využívá skript dostupný na http://code.google.com/p/goobook/source/checkout&lt;/p&gt;&lt;p&gt;Stáhněte si zdrojové kódy, nakopírujte někam do $PATH, abyste mohli gobook používat i mimo Mutt a nastavte si v settings.py přihlašovací údaje na svůj google účet.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-sh&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;cd&lt;/span&gt; /tmp/
svn checkout http://goobook.googlecode.com/svn/trunk/ goobook
cp goobook/goobook.py ~/bin/
cp goobook/settings_example.py ~/bin/settings.py
vim ~/bin/settings.py&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;V &lt;code&gt;.muttrc&lt;/code&gt; pak stačí přidat řádky&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-conf&quot;&gt;set query_command=&quot;~/bin/contacts &apos;%s&apos;&quot;
bind editor &amp;#x26;lt;Tab&amp;#x26;gt; complete-query&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A je hotovo. Stačí dát m pro napsání nového mailu, napsat začátek jména, stisknout jednou či dvakrát Tab a jména se doplňují. Vše se navíc cachuje, rychlost odezvy je výborná.&lt;/p&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[2 monitory, projektor, TwinView a Xinerama]]></title><link>https://kepi.cz/linux/2monitory-projektor-twinview-a-xinerama</link><guid isPermaLink="false">https://kepi.cz/linux/2monitory-projektor-twinview-a-xinerama</guid><pubDate>Tue, 10 Mar 2009 23:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nedávno jsem si domů pořídil druhé LCD a začal si užívat pohodlí, které přináší. Problém nastal hned ve chvíli, kdy jsem se chtěl koukat na film – grafika má pouze dva DVI výstupy a tak nastalo odsouvání monitoru, přehazování kabelů a přepínání rozlišení pokaždé, když jsem chtěl na něco mkrnout.&lt;/p&gt;&lt;p&gt;Tento článek není dokončený, průběžně budu upravovat a doplňovat informace.&lt;/p&gt;&lt;p&gt;Přestalo mě to bavit poměrně rychle a začaly padat řešení: koupit kartu s více výstupy, najít nějaký přepínač nebo přikoupit další slabší kartu jen na projektor. První řešení vychází dost draze, zvlášť když chcete na počítači i hrát, u druhého jsem nevěřil tomu, že nezpůsobí další problémy a tak přišel na řadu nákup další karty…&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Výběr karty&lt;/h2&gt;&lt;p&gt;Výběr karty byl poměrně jednoduchý. X.Org sice zvládají bez problémů více karet od různých výrobců, ale proč mít zbytečně natáhnutých více ovladačů a řešit další probémy. K stávající pasivní GeForce 9600 GT se tak přidala další pasivka GeForce 8400 GS.&lt;/p&gt;&lt;p&gt;Co se týče výkonu, stačila by mi i mnohem slabší karta, jenže starší karty již nejsou podporovány v novějších ovladačích. Pokud budete něco podobného řešit, určitě si dejte pozor na místo v bedně, u mě to vyšlo dost natěsno, 9600 GT totiž zabírá dva sloty.&lt;/p&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;Na co myslet při výběru karty&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;zvážit, jestli radši nebudete přepínat kabely :)&lt;/li&gt;&lt;li&gt;zjistit, jestli máte v počítači další slot na grafiku, ne každá bedna má dva&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;PCI Express nebo AGP sloty. Vždy můžete ale pořídit grafickou kartu do PCI. Bohužel většinou vychází podstatně dráž.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;zajistit si správné chlazení&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Nastavení v X.Org&lt;/h2&gt;&lt;p&gt;A tady přišel kámen úrazu. Se svou neoblomnou důvěrou v to, že v linuxu je možné vše jsem dopředu příliš materiálů nečetl a skončil s dosti rozporuplnými dojmy. TwinView totiž umí jen dva monitory a třetí musíte přidat jako samostatnou Screen a to ještě není všechno. Jakmile jsem přidal další screen TwinView přestalo TwinViewovat a já skončil u čtení diskuzí a experimentování.&lt;/p&gt;&lt;p&gt;Pokud jsem správně pochopil, tak vše funguje tak, že aplikace dostávají přes knihovnu Xineramy informace o tom, jaké rozlišení máte na které obrazovce a proto se vám správně maximalizují okna. TwinView jako takové využívá pouze jednu screen pro dva monitory, ale přes své vlastní volání aplikacím podstrkuje rozložení, které chcete.&lt;/p&gt;&lt;p&gt;Celý problém je v tom, že aktivuje-li se v X.Org Xinerama, TwinView přestane pro X poskytovat informace o rozložení monitorů a obraz se roztáhne přes oba monitory, stejně tak se maximalizují okna a vše ostatní. V dokumentaci se doporučuje využít volby TwinViewXineramaInfoOrderOverride, což u mě vůbec nezabralo.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-conf&quot;&gt;Option         &quot;TwinViewXineramaInfoOrderOverride&quot; &quot;1680x1050+0+0, 1680x1050+1680+0, 1024x768+3360+0&quot;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;section&quot;&gt;&lt;h3&gt;fakexinerama&lt;/h3&gt;&lt;p&gt;Nebudu vás napínat, doteď jsem problém plně nevyřešil, ale nejrychlejším řešením je projektík fakexinerama, který upraví knihovnu xineramy pro zjištění informací o rozložení monitorů z vašeho konfiguračního souboru. Ano, je to dosti neflexibilní a má to neodstatky, ale aspoň nějak to funguje.&lt;/p&gt;&lt;p&gt;V knihovně jsem si upravil cesty ke konfiguráku na globální /etc/fakexinerama, nastavil ho, zkompiloval knihovnu, restartoval X a vše relativně jede.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;hljs language-console&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;bash&quot;&gt; cat /etc/fakexinerama&lt;/span&gt;
3
0 0 1680 1050
1680 0 1680 1050
3360 0 1024 768&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;&lt;h2&gt;Zbývající problémy&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;na projektoru je stejné virtuální rozlišení jako na prvních dvou monitorech, tzn. konfigurační část fakexinerama zdatně ignoruje&lt;/li&gt;&lt;li&gt;po aktualizaci mplayer na poslední SVN se bohužel video v celoobrazovkovém režimu roztahuje přes virtuální plochu stejně jako okna ve window manageru&lt;/li&gt;&lt;li&gt;na projektor nelze přetahovat okna (nepoužívá se přímo Xinerama), myš a klávesnice se ale sdílí&lt;/li&gt;&lt;li&gt;bylo by pěkné moci nějak deaktivovat kartu pokud se nepoužívá (úspora energie tepla a podobně)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content:encoded></item></channel></rss>