Понятно, что можно обойтись смартфоном или планшетом, особенно если нужно только зайти по ssh. Но пользоваться в таких случаях тачскрином, как по мне, — это боль и страдания.
Можно приобрести внешнюю клавиатуру, держатель или подставку для планшета, но я считаю, что проще уж тогда носить с собой полноценный ноутбук. Места займет примерно столько же.
Немножко воспоминаний и рассуждений
Кому лень читать, можно сразу перейти к практической части.
В свое время, когда андроидов и айфонов еще не существовало, для подобных вещей я использовал «интернет-планшет» Nokia N810. Аппарат габаритами с современный смартфон, имеющий при этом qwerty-клавиатуру да еще и с полноценным линуксом на борту. Ssh, vnc, rdesktop — да не вопрос! Плюс, активно пользовался CAS Maxima, когда нужно было что-то по-быстрому обсчитать и показать результат.
Но время шло, стали появляться андроид-сматрфоны. Вот оно, думал я: практически полноценный же линукс, при этом, нет нужды носить с собой еще один девайс, чтобы раздавать Интернет. Стал присматривать аппарат с qwerty, который заменил бы мне старую-добрую n810, к тому времени уже изрядно подуставшую (шлейф экрана, два раза замененный аккумулятор, клавиатура, побитый корпус). Выбор пал на Motorola Milestone.
Вот оно, поделие, рядом с моим старым-добрым Palm V и N810:
Надо сказать, что изделие доверия не оправдало. Клавиатура оказалась полным разочарованием. Даже не из-за раскладки, а из-за крайне низкого качества изготовления: после полугода использования, она начала отслаиваться и болтаться.
Шифрованный загрузчик добавлял своих гвоздей в гроб: невозможность использовать кастомное ядро со всеми вытекающими, debian chroot из-за особенностей питания жрал батарейку как не в себя, но все равно, худо-бедно изделие решало возложенные на него задачи.
Худо-бедно потому, что продолжало использоваться уже после истечения периода запланированного устаревания, определенного производителем, когда были выпущены несколько более свежих моделек ( отличающихся, разве-что чуть измененной раскладкой и большим количеством оперативки) и при этом дико глючило и тормозило.
Кончила свои дни моторолка весьма брутально: отправившись в очередной мертвый фриз во время звонка, она была разбита об стену.
Окей, как ssh-терминал сойдет и смартфон (сожрет, конечно, какое-то количество ваших нервных клеток). Но бывают случаи, что надо прицепиться к какой-нибудь железке консольным кабелем, или снять tcpdump’ом неизветсный IP устройства, дабы что-то с ним можно было сделать.
Просто феерично, когда из-за наличия COM-порта на док-станции, человек тащит с собой здоровенную 17″ HP-шную дуру с доком и полуторакилограммовым блоком питания, а потом еще и висит со всем этим добром на стремянке перед стойкой.
В последнее время, я использовал 12″ ThinkPad x220 с usb2com переходником. Но все чаще и чаще стал оставлять ноут дома, пока однажды (в очередной раз) не случилось «$username, все сломалось!», а при себе только смартфон на андроиде.
Вот она, рыба моей мечты (на самом деле, нет)
И наткнулся я, однажды, на изделие под названием GPD Pocket. Полноценный ноутбук в форм-факторе пересмартфона или недопланшета. 7″, qwerty-клавиатура, приличный запас автономности — ух, надо брать. Заказал, получил, распаковал.
Для сравнения с х220 и n810:
Характеристики расписывать не буду, кому надо — найдет в Интернете, тем более, был тут недавно приторный обзор от гирбеста. Просто приведу выхлоп lshw и lspci:
lshw:
описание: Настольный компьютер продукт: Default string (Default string) производитель: Default string версия: Default string серийный №: Default string разрядность: 64 bits возможности: smbios-3.0 dmi-3.0 vsyscall32 конфигурация: boot=normal chassis=desktop family=Default string sku=Default string uuid=00020003-0004-0005-0006-000700080009 *-core описание: Материнская плата продукт: Default string производитель: AMI Corporation физический ID: 0 версия: Default string серийный №: Default string слот: Default string *-firmware описание: BIOS производитель: American Megatrends Inc. физический ID: 0 версия: 5.11 date: 08/07/2017 размер: 64KiB capacity: 4032KiB возможности: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int14serial int17printer acpi usb biosbootspecification uefi *-memory описание: Системная память физический ID: 28 слот: Системная плата или материнская плата размер: 8GiB *-bank:0 описание: DIMM DDR3 1066 MHz (0,9 ns) продукт: 00000000 производитель: Hynix Semiconductor физический ID: 0 серийный №: 00000000 слот: A1_DIMM0 размер: 4GiB разрядность: 8 bits частота: 1066MHz (0.9ns) *-bank:1 описание: DIMM DDR3 1066 MHz (0,9 ns) продукт: 00000000 производитель: Hynix Semiconductor физический ID: 1 серийный №: 00000000 слот: A1_DIMM1 размер: 4GiB разрядность: 8 bits частота: 1066MHz (0.9ns) *-cache:0 описание: L1 кэш физический ID: 32 слот: CPU Internal L1 размер: 224KiB capacity: 224KiB возможности: internal write-back конфигурация: level=1 *-cache:1 описание: L2 кэш физический ID: 33 слот: CPU Internal L2 размер: 2MiB capacity: 2MiB возможности: internal write-back unified конфигурация: level=2 *-cpu описание: ЦПУ продукт: Intel(R) Atom(TM) x7-Z8750 CPU @ 1.60GHz производитель: Intel Corp. физический ID: 34 сведения о шине: cpu@0 версия: Intel(R) Atom(TM) x7-Z8750 CPU @ 1.60GHz слот: SOCKET 0 размер: 889MHz capacity: 2560MHz разрядность: 64 bits частота: 80MHz возможности: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch epb pti tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm ida arat cpufreq конфигурация: cores=4 enabledcores=4 threads=4 *-pci описание: Host bridge продукт: Intel Corporation производитель: Intel Corporation физический ID: 100 сведения о шине: pci@0000:00:00.0 версия: 34 разрядность: 32 bits частота: 33MHz конфигурация: driver=iosf_mbi_pci ресурсы: IRQ:0 *-display описание: VGA compatible controller продукт: Intel Corporation производитель: Intel Corporation физический ID: 2 сведения о шине: pci@0000:00:02.0 версия: 34 разрядность: 64 bits частота: 33MHz возможности: pm msi vga_controller bus_master cap_list rom конфигурация: driver=i915 latency=0 ресурсы: IRQ:123 память:a0000000-a0ffffff память:80000000-9fffffff ioport:f000(размер=64) память:c0000-dffff *-generic:0 описание: Signal processing controller продукт: Intel Corporation производитель: Intel Corporation физический ID: b сведения о шине: pci@0000:00:0b.0 версия: 34 разрядность: 64 bits частота: 33MHz возможности: msi pm cap_list конфигурация: driver=proc_thermal latency=0 ресурсы: IRQ:129 память:a1a3b000-a1a3bfff *-usb описание: USB controller продукт: Intel Corporation производитель: Intel Corporation физический ID: 14 сведения о шине: pci@0000:00:14.0 версия: 34 разрядность: 64 bits частота: 33MHz возможности: pm msi xhci bus_master cap_list конфигурация: driver=xhci_hcd latency=0 ресурсы: IRQ:121 память:a1a00000-a1a0ffff *-usbhost:0 продукт: xHCI Host Controller производитель: Linux 4.15.0-rc7-stockmind-gpdpocket xhci-hcd физический ID: 0 сведения о шине: usb@1 логическое имя: usb1 версия: 4.15 возможности: usb-2.00 конфигурация: driver=hub slots=7 speed=480Mbit/s *-usb:0 описание: Клавиатура продукт: Gaming Keyboard производитель: SINO WEALTH физический ID: 2 сведения о шине: usb@1:2 версия: 1.00 возможности: usb-1.10 конфигурация: driver=usbhid maxpower=100mA speed=1Mbit/s *-usb:1 описание: Типовой USB-накопитель продукт: BCM2045A0 производитель: Broadcom Corp физический ID: 3 сведения о шине: usb@1:3 версия: 1.12 серийный №: B0F1ECED56A9 возможности: usb-2.00 конфигурация: driver=btusb maxpower=100mA speed=12Mbit/s *-usbhost:1 продукт: xHCI Host Controller производитель: Linux 4.15.0-rc7-stockmind-gpdpocket xhci-hcd физический ID: 1 сведения о шине: usb@2 логическое имя: usb2 версия: 4.15 возможности: usb-3.00 конфигурация: driver=hub slots=6 speed=5000Mbit/s *-generic:1 описание: Encryption controller продукт: Intel Corporation производитель: Intel Corporation физический ID: 1a сведения о шине: pci@0000:00:1a.0 версия: 34 разрядность: 32 bits частота: 33MHz возможности: pm msi bus_master cap_list конфигурация: driver=mei_txe latency=0 ресурсы: IRQ:130 память:a1900000-a19fffff память:a1800000-a18fffff *-pci описание: PCI bridge продукт: Intel Corporation производитель: Intel Corporation физический ID: 1c сведения о шине: pci@0000:00:1c.0 версия: 34 разрядность: 32 bits частота: 33MHz возможности: pci pciexpress msi pm normal_decode bus_master cap_list конфигурация: driver=pcieport ресурсы: IRQ:117 память:a1000000-a14fffff *-network описание: Беспроводной интерфейс продукт: BCM4356 802.11ac Wireless Network Adapter производитель: Broadcom Corporation физический ID: 0 сведения о шине: pci@0000:01:00.0 логическое имя: wlp1s0 версия: 02 серийный №: b0:f1:ec:ed:56:a8 разрядность: 64 bits частота: 33MHz возможности: pm msi pciexpress bus_master cap_list ethernet physical wireless конфигурация: broadcast=yes driver=brcmfmac driverversion=7.35.180.119 firmware=01-1a5c4016 ip=192.168.1.142 latency=0 multicast=yes wireless=IEEE 802.11 ресурсы: IRQ:125 память:a1400000-a1407fff память:a1000000-a13fffff *-isa описание: ISA bridge продукт: Intel Corporation производитель: Intel Corporation физический ID: 1f сведения о шине: pci@0000:00:1f.0 версия: 34 разрядность: 32 bits частота: 33MHz возможности: isa bus_master cap_list конфигурация: driver=lpc_ich latency=0 ресурсы: IRQ:0
lspci:
00:00.0 Host bridge: Intel Corporation Device 2280 (rev 34) 00:02.0 VGA compatible controller: Intel Corporation Device 22b0 (rev 34) 00:0b.0 Signal processing controller: Intel Corporation Device 22dc (rev 34) 00:14.0 USB controller: Intel Corporation Device 22b5 (rev 34) 00:1a.0 Encryption controller: Intel Corporation Device 2298 (rev 34) 00:1c.0 PCI bridge: Intel Corporation Device 22c8 (rev 34) 00:1f.0 ISA bridge: Intel Corporation Device 229c (rev 34) 01:00.0 Network controller: Broadcom Corporation BCM4356 802.11ac Wireless Network Adapter (rev 02)
Качество сборки хорошее, ничего не люфтит, не скрипит, не прогибается. Корпус алюминиевый и вообще, девайс производит впечатление эдакого монолитного блока. Это плюс.
Но минусов тоже хватает. Глянцевый экран. Нет, он не просто глянцевый — это буквально зеркало. То есть, свое отражение будете наблюдать в условиях любой, отличной от нуля, освещенности. В комплекте была защитная пленка, но она проблему не решила.
Второе — это клавиатура. То, что она есть — это замечательно.
А вот то, как реализована — это стыд и ужас. Попытка закоса под макбук, с этими здоровенными промежутками между кнопками — ну зачем? Ведь целевая аудитория, вроде бы, не гламурные кисы — те просто возьмут очередной айпед или макбук. Не будь этих несчастных промежутков, размер клавиш можно было сделать больше.
Кнопочка Fn имеет весьма скудный слой: это 2 кнопки регулировки яркости, F1-F12 и Insert. Зачем нужен верхний ряд? Его можно было реализовать отдельным слоем.
Особенную боль и страдание у пользователей Vim вызывает двоеточие, вынесенное в нижний ряд, рядом с ctrl.
Ладно, все плохо, будем лечить, благо есть кое-какие способы (об этом ниже).
Ах да, здесь есть трекпоинт. Что мне, как пользователю ThinkPad’ов со стажем, греет душу. Только вот одно но: трекпоинт расположен совершенно не в том месте и для того, чтобы им воспользоваться, придется выгибать большой палец. Это, к сожалению, неизлечимо. Но за пару дополнительных колпачков красного цвета в комплекте, конечно, спасибо.
Трекпоинт здорового человека:
Трекпоинт курильщика:
Установка и настройка Linux на GPD Pocket
Понятно, что «окна», а «окна10» особенно, мне на данном устройстве не то, что ни к чему, а просто противопоказаны.
Из-за особенностей девайса, таких как ориентация экрана (он повернут набок), просто взять и установить любимый Debian без плясок с бубном не получится.
В принципе, на официальном сайте есть официальный же образ Ubuntu LTS 16.04 (что мне кажется неплохой альтернативой стабильному Debian’у), но ознакомившись с обсуждениями в Интернете, было решено использовать проект GPD Pocket Ubuntu Respin
Подчеркну, в общем-то, очевидную вещь, что для использования годится только образ, построенный на Ubuntu и скормить скрипту, например, Debian, не выйдет:
$./build.sh debian-9.3.0-amd64-netinst.iso Display setting: Xorg-Standard Looking for kernel image... Extracting kernel files... Archive: gpdpocket-20180115-kernel-files.zip inflating: linux-headers-4.15.0-rc7-stockmind-gpdpocket_4.15.0-rc7-stockmind-gpdpocket-1_amd64.deb inflating: linux-image-4.15.0-rc7-stockmind-gpdpocket_4.15.0-rc7-stockmind-gpdpocket-1_amd64.deb inflating: linux-libc-dev_4.15.0-rc7-stockmind-gpdpocket-1_amd64.deb ./isorespin.sh: 'debian-9.3.0-amd64-netinst.iso' must be an Ubuntu (or Ubuntu flavour), Linux Mint, neon, elementary, BackBox or Peppermint desktop ISO.
На выходе получаем файл linuxium-xubuntu-16.04-desktop-amd64.iso, который и записываем на флешку:
#dd if=linuxium-xubuntu-16.04-desktop-amd64.iso of=/dev/sdX
Грузимся с нее, выставив загрузочным устройством, зайдя в настройки UEFI кнопкой Delete при загрузке.
Процедура установки тривиальна, детально распысывать смысла не вижу. Отмечу только, что лучше ее производить из Live-режима, так экран не будет повернут набок.
Использую полнодисковое шифрование, на случай, если устройство вдруг будет потеряно или украдено. Так, по крайней мере, все ваши ssh-ключи (да-да, я знаю про защиту их паролем и ssh-agent) и логины на Интернет-ресурсах останутся в целости. Потому, ставлю на LVM поверх LUKS, чего и вам желаю.
Исправляем кривулины
Сон и гибернация
Неплохо бы иметь возможность бросить ноут в сумку и забыть про него до того момента, пока не понадобится. Благо, размеры и масса позволяют. Неплохо бы еще не запускать, каждый раз, нужные приложения вручную, а просто продолжить работу с того места, где остановились.
Режим сна, вроде как, работает «из-коробки». Реализован он штатными средствами, то бишь через systemctl suspend. Однако, опытным путем, было установлено, что энергопотребление в таком режиме не сильно уступает потреблению в простое. Судя по всему, аппарат просто гасит экран, сетевые интерфейсы и отключает кулер. В итоге, высадит аккумулятор в ноль суток за двое.
Нужна гибернация. Штатная systemctl hibernate оказалась неработоспособной: состояние дампится в своп, но восстановиться при загрузке не может.
Вспомнил, что есть такой проект — Userspace Software Suspend и в репозитарии есть его пакеты.
#apt install hibernate
Проверяем:
#hibernate-disk
Вуаля, работает! Система сдампилась и отключилась. После ввода пароля LUKS, восстановилась. Но накрылись звук и wifi, яркость подсветки экрана сбросилась на максимум. Будем допиливать.
Доустанавливаем нужное
Прежде чем перейти к настройке ACPI, потребуется поставить несколько утилит.
Так за регулировку яркости экрана отвечает xbacklight.
#apt install xbacklight
В ноуте не жесткий диск, а флэш-накопитель, потому убивать его свопом мне не хочется. Есть такая штука ZRam, вот ее и будем использовать. Сейчас с этим все просто, прописывать простыни в rc.local не требуется, и нужно, всего-навсего, сделать следующее:
#apt install zram-config #sudo systemctl enable zram-config.service
Скрипт сам подсчитает нужное количество памяти и сделает swapon.
Допиливаем acpi
В первую очередь, отключаем systemg’шные обработчики. Так как делает оно все своими средствами, а они неработоспособны. Девиз — делаем все, но делаем плохо. Например, обрабатывать подключение адаптера питания или наушников, нажатия клавиш и тому подобного оно так и не научилось.
/etc/systemd/logind.conf
HandlePowerKey=ignore HandleLidSwitch=ignore
#systemctl restart systemd-logind.service
За обработку acpi-событий отвечает демон acpid, конфиг-файлы которого хранятся, внезапно, в /etc/acpi.
Отправлять ноут в гибернацию будем по нажатию кнопки включения. Для этого отредактируем следующие файлы (если их нет, надо создать):
/etc/acpi/events/powerbtn
event=button[ /]power action=/etc/acpi/hibernate.sh
/etc/acpi/hibernate.sh (с комментариями)
#!/bin/bash #отключаю свой скрипт блокировки экрана, так как при загрузке будет запрошен пароль LUKS mv /home/user/bin/lock /home/user/bin/nolock #убиваем пшшш-аудио killall -9 pulseaudio #отключае zram и активируем swap systemctl stop zram-config.service swapon /dev/xubuntu-vg/swap_1 #сохраняем состояние подсветки экрана DISPLAY=:0.0 su user -c "xbacklight >/tmp/xbl" #отмонтируем сетевые файловые системы umount -alt nfs4 umount -alt cifs #усыпляем wpa_supplicant /sbin/wpa_cli suspend hibernate-disk sleep 2 #восстанавливаем статус подсветки DISPLAY=:0.0 su user -c "xbacklight -set `cat /tmp/xbl`" #восстанавливаем wpa_supplicant /sbin/wpa_cli resume #перезагружаем модули alsa, иначе звука не будет. пшш-аудио при вызове восстановится самостоятельно /sbin/alsa force-reload #звуковая система ноута оставляет желать лучшего. было замечено, что при больших значениях канала DAC1, из динамиков и наушников идет дикий перегруз до хрипоты и дребезжания amixer -c 1 set 'DAC1' 90% #убиваем блокировщик экрана на случай, если гибернация была запущена при залоченном экране killall i3lock #восстанавливаем возможность запуска блокировщика mv /home/user/bin/nolock /home/user/bin/lock #восстанавливаем zram systemctl start zram-config.service #отключаем своп на карту swapoff /dev/xubuntu-vg/swap_1
Автоматическую гибернацию при низком заряде реализовать не просто, а очень просто:
#apt install acpi
/etc/acpi/ifbatlowgotosleep.sh
#!/bin/bash level=`/usr/bin/acpi -b|sed '/unava/d'|awk -F '{ print $4 }'|sed -e 's/,//' -e's/%//'` if [ "$level" -lt "10" ] then /etc/acpi/hibernate.sh fi
Скрипт проверяет состояние заряда. Если меньше 10%, то выполняет приведенный выше скрипт гибернации.
Периодичное выполнение задается через crontab:
$sudo crontab -e */3 * * * * /etc/acpi/ifbatlowgotosleep.sh 2>/dev/null
В моем случае, опрос батарейки выполняется каждые 3 минуты.
Режим сна (systemctl suspend), как упоминалось выше, довольно бесполезен. Потому, не вижу смысла активировать его при закрытии крышки. Тем более, может возникнуть желание, скажем, послушать музыку с закрытого ноута, находящегося в кармане (не зря же он «pocket»).
Поэтому, просто гасим экран при закрытии и включаем при открытии.
Удаляем /etc/acpi/lidbtn.
Создаем и редактируем:
/etc/acpi/events/lidclose:
event=button/lid LID close action=/etc/acpi/lidclose.sh
/etc/acpi/events/lidopen:
event=button/lid LID open action=/etc/acpi/lidopen.sh
/etc/acpi/lidopen.sh
DISPLAY=:0.0 su user -c "xrandr --output DSI1 --off"
/etc/acpi/lidclose.sh
DISPLAY=:0.0 su user -c "xrandr --output DSI1 --auto --rotate right --dpi 200"
Значение DPI выставьте по вкусу, а user — это незамысловатое имя моей учетной записи (поменяйте на свою).
Настраваем клавиши управления звуком и яркостью
Делаем это через все те же acpi-события.
/etc/acpi/events/voldown
event=button[ /]volumedown action=/etc/acpi/volume-down.sh
/etc/acpi/events/volup
event=button[ /]volumeup action=/etc/acpi/volume-up.sh
/etc/acpi/events/mute
event=button[ /]mute action=/etc/acpi/volume-toggle.sh
Скрипты:
/etc/acpi/volume-toggle.sh
amixer -c 1 set 'Speaker Channel' toggle amixer -c 1 set 'Headphone Channel' toggle
/etc/acpi/volume-up.sh
amixer -c 1 set 'Headphone' 5%+ amixer -c 1 set 'Speaker' 5%+
/etc/acpi/volume-down.sh
amixer -c 1 set 'Headphone' 5%- amixer -c 1 set 'Speaker' 5%-
Аналогично и для яркости:
/etc/acpi/events/bdown
event=button[ /]brightnessdown action=/etc/acpi/bdown.sh
/etc/acpi/events/bup
event=button[ /]brightnessup action=/etc/acpi/bup.sh
/etc/acpi/bup.sh
DISPLAY=:0.0 su user -c "xbacklight -inc 5%"
/etc/acpi/bdown.sh
DISPLAY=:0.0 su user -c "xbacklight -dec 5%"
Напомню, user — имя моей учетки. Впишите свою.
Наушники
Говн^WСвоеобразный чип Realtek ALC5645 не умеет самостоятельно отключать динамики при подключении наушников. Придется научить систему делать это самостоятельно.
В respin есть такой вот скрипт:
#!/bin/bash set -e -u if [ "$1" = "jack/headphone" -a "$2" = "HEADPHONE" ]; then case "$3" in plug) sink="[Out] Headphones" ;; *) sink="[Out] Speaker" ;; esac for userdir in /run/user/*; do uid="$(basename $userdir)" user="$(id -un $uid)" if [ -f "$userdir/pulse/pid" ]; then su "$user" -c "pacmd set-sink-port alsa_output.platform-cht-bsw-rt5645.HiFi__hw_chtrt5645__sink $sink" fi done fi
Но он не работает. Пытается делать переключение через управление синками пшшш-аудио, но у него не получается. Потому, что:
$sudo su #su user -c "pacmd set-sink-port alsa_output.platform-cht-bsw-rt5645.HiFi__hw_chtrt5645__sink '[Out] Speaker'" Нет запущенного демона PulseAudio, либо он не запущен в качестве сеансового демона.
Разгадка проста: когда процесс пшшш-аудио еще не вызван клиентом, связываться pacmd не с чем. Можно, конечно, добавить строчку запуска этого самого в rc.local, xinitrc или вовсе написать отдельный systemg юнит, но я посчитал, что лучше выстругать собственный костыль, чем ремонтировать чужие. И написал свой скрипт, гораздо менее монстроузный и замудренный, я считаю.
/etc/acpi/headphone-jack.sh
#!/bin/bash set -e -u if [ "$3" = "plug" ]; then amixer -c 1 set 'Speaker Channel' mute >/dev/null amixer -c 1 set 'Headphone Channel' unmute >/dev/null else amixer -c 1 set 'Speaker Channel' unmute >/dev/null amixer -c 1 set 'Headphone Channel' mute >/dev/null fi
Лечим раскладку и прочие мелочи
Как уже упоминал, раскладка меня бесит. Кнопка delete там, где должен быть backslash и bar, двоеточие в нижнем ряду, непонятно для чего вынесенная клавиша menu, tab там, где в нормальных клавиатурах находится escape…
Детально, с разбором, расписывать не буду, просто приведу свой ~/.xmodmaprc и опишу как это все делается.
Для начала, нам нужно отловить кейкод. Делается это с помощью программы xev (#apt install xev, да). Запускаем, нажимаем нужную клавишу и получаем вывод вроде:
KeyPress event, serial 33, synthetic NO, window 0x3200001, root 0x2c0, subw 0x0, time 187713326, (979,493), root:(982,1078), state 0x0, keycode 119 (keysym 0xffff, Delete), same_screen YES, XLookupString gives 1 bytes: (7f) "" XmbLookupString gives 1 bytes: (7f) "" XFilterEvent returns: False
Нам нужно значение «keycode 119».
Далее, открываем ~/.xmodmaprc и прописываем туда
keycode 119 = backslash bar backslash bar
И вносим выполнение «xmodmap ~/.xmodmaprc» в свой xinitrc или что там у вас вызывается при старте вашего любимого DE или WM.
Мой ~/.xmodmaprc:
pointer = 1 2 3 4 5 remove Lock = Caps_Lock remove Control = Control_L keycode 0x42 = Control_L keycode 135 = Alt_R keycode 0x25 = Super_R keycode 133 = Super_R add Control = Control_L keycode 113 = Left keycode 111 = Up keycode 114 = Right keycode 116 = Down keycode 110 = Home keycode 115 = End keycode 108 = ISO_Next_Group keycode 136 = ISO_First_Group keycode 49 = asciitilde grave asciitilde grave keycode 119 = backslash bar backslash bar keycode 51 = Delete keycode 48 = colon semicolon Cyrillic_zhe Cyrillic_ZHE keycode 47 = apostrophe quotedbl Cyrillic_e Cyrillic_E keycode 130 = XF86Explorer keycode 121 = XF86AudioMute keycode 198 = XF86AudioMicMute keycode 122 = XF86AudioLowerVolume keycode 123 = XF86AudioRaiseVolume keycode 37 = Tab clear mod5 add mod5 = XF86Explorer keycode 166 = Prior keycode 167 = Next
Там используются такие сомнительные, для большинства пользователей, вещи, как перенос ctrl на caps-lock, tab на ctrl_l, alt_gr на menu и переключение раскладки по старому положению altgr.
Еще я использую xcape для эмуляции нажатия escape при однократном нажатии на ctrl_l. Вызывается так:
xcape -t 1000 -e "Control_L=Escape"
Так как предпочитаю темные темы оформления, которые более комфортны (имею мнение, хрен оспоришь) в условиях слабой освещенности, но зачастую приходится работать при ярком дневном свете, есть небольшой финт: цвета изображения можно инвертировать. Для этого понадобирся программа xcalib:
#apt install xcalib
Инвертируем:
$xcalib -i -a
Можно забиндить на любой удобный хоткей средствами оконного менеджера. У меня висит на Super_L+Backspace.
Итог
Впечатления от девайса больше положительные, чем отрицательные. О потраченных деньгах не жалею. Аппарат не занимает много места в сумке, помещается в карман карго-штанов и смок-подобной куртки.
От батарейки работает долго, для пробы прокрутил три полуторачасовых фильма при включеном wifi, разрядил где-то наполовину. Заряжается от павербанка с usb-a через переходник a-c.
Все повстречавшиеся софтовые кривулины успешно подлечены.
Очень жаль, что нет порта rj45, но надеюсь, решится заказанным переходником с usb. Отсутствие мобильной связи и камеры, нынче, в условиях тотальной слежки, считаю скорее плюсом.
Источник