Cada administrador, talvez, teve um caso em que algo de repente quebra e você está em algum lugar na estrada: você vai de carro, pega um trem ou, banalmente, senta em algum lugar em um banco do parque e se solta e sai correndo para algum lugar o desejo não é o menor. E você precisa corrigi-lo. Ou, no mínimo, avalie a escala do animal branco com pêlo que chegou.
É claro que você pode fazer isso com um smartphone ou tablet, especialmente se você precisar apenas usar o ssh. Mas usar uma tela sensível ao toque nesses casos, como para mim, é dor e sofrimento.
Você pode comprar um teclado, suporte ou suporte externo para o tablet, mas acho que é mais fácil carregar um laptop completo com você. Os lugares continuarão iguais.
Algumas memórias e raciocínio
Com preguiça de ler, você pode imediatamente ir para a
parte prática.Ao mesmo tempo, quando androids e iPhones ainda não existiam, usei o "tablet para Internet" Nokia N810. O aparelho tem dimensões com um smartphone moderno, enquanto possui um teclado qwerty e até com Linux completo a bordo. Ssh, vnc, rdesktop - sim, sem dúvida! Além disso, usei ativamente o CAS Maxima quando precisava calcular rapidamente algo e mostrar o resultado.


Mas o tempo passou, os smartphones Android começaram a aparecer. Aqui está, pensei: Linux quase completo, ao mesmo tempo, não há necessidade de carregar outro dispositivo com você para distribuir a Internet. Comecei a cuidar do aparelho com o qwerty, que me substituiria pelo bom e velho n810, que naquela época estava bastante cansado (cabo de tela, bateria substituída duas vezes, teclado, estojo quebrado). A escolha recaiu sobre o Motorola Milestone.
Aqui está, em parte, ao lado do meu bom e velho Palm V e N810:

Devo dizer que o produto não justificou a confiança. O teclado foi uma decepção completa. Nem por causa do layout, mas por causa do acabamento extremamente ruim: após seis meses de uso, ele começou a esfoliar e a sair.
O gerenciador de inicialização criptografado adicionou seus pregos ao caixão: a incapacidade de usar o núcleo personalizado com todas as consequências, o debian chroot comeu a bateria como se por si só, devido às peculiaridades da fonte de alimentação, mas de qualquer maneira, o produto de alguma maneira resolveu as tarefas atribuídas a ele.
No mínimo, continuou a ser usado após o término do período de obsolescência planejado determinado pelo fabricante, quando vários modelos mais recentes foram lançados (diferentes, talvez com um layout ligeiramente alterado e com muita memória RAM), e era extremamente lento e lento.
Tudo bem, como o terminal ssh desce e o smartphone (é claro, ele devora uma certa quantidade de células nervosas). Mas há casos em que você precisa se prender a um pedaço de ferro com um cabo de console ou remover o tcpdump com um dispositivo IP que não responde, para que você possa fazer algo com ele.
É simplesmente encantador quando, devido à presença de uma porta COM na estação de acoplamento, uma pessoa arrasta um idiota shnuy de 17 "HP com uma doca e uma fonte de alimentação de 1,5 kg e depois fica com todo esse material na escada em frente ao balcão.
Recentemente, usei o ThinkPad x220 de 12 "com adaptador usb2com. Mas, cada vez mais, comecei a deixar o laptop em casa, até que um dia (mais uma vez)" $ username, tudo quebrou! ", E eu só tinha um smartphone Android comigo.
Aqui está, o peixe dos meus sonhos (de fato, não)
E uma vez me deparei com um produto chamado GPD Pocket. Um laptop completo no formato de um re-smartphone ou tablet de tamanho menor. Teclado qwerty de 7 ", uma margem decente de autonomia - você precisa aceitá-lo. Eu pedi, recebi, desempacotei.
Para comparação com x220 e n810:

Não descreverei as características daqueles que precisam - eles a encontrarão na Internet, especialmente porque houve recentemente uma revisão desagradável da girbest aqui. Apenas dê o escape lshw e lspci:
lshw:
Texto oculto: : 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:
Texto oculto 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)
A qualidade de construção é boa, não toca nada, não range, não se dobra. A caixa é de alumínio e, em geral, o dispositivo dá a impressão de uma espécie de bloco monolítico. Isto é uma vantagem.
Mas há desvantagens suficientes também. Tela brilhante. Não, não é apenas brilhante - é literalmente um espelho. Ou seja, você observará seu reflexo em condições de qualquer iluminação diferente de zero. Havia um filme protetor no kit, mas não resolveu o problema.
O segundo é o teclado. O fato de ela ser é maravilhoso.

Mas como é implementado é vergonha e horror. Tentando invadir o macbook, com essas lacunas entre os botões - bem, por quê? Afinal, o público-alvo, ao que parece, não é gatinhos fascinantes - eles apenas levam o próximo ipad ou macbook. Não tenha essas lacunas infelizes, o tamanho das chaves pode ser aumentado.
O botão Fn tem uma camada muito escassa: são 2 botões para ajustar o brilho, F1-F12 e Insert. Por que precisamos da linha superior? Pode ser implementado como uma camada separada.
Os usuários do Vim são particularmente dolorosos e sofrem com dois pontos colocados na linha inferior ao lado de ctrl.
Ok, tudo está ruim, vamos tratar disso, já que existem algumas maneiras (mais sobre isso abaixo).
Ah, sim, há um ponto de trilha aqui. O que para mim, como um usuário experiente do ThinkPad, aquece minha alma. Só uma coisa, mas: o trackpoint está localizado no lugar errado e, para usá-lo, você precisa dobrar o polegar. Infelizmente, isso é incurável. Mas, por algumas tampas vermelhas adicionais no kit, é claro, obrigado.
Trackpoint de pessoa saudável:

Trackpoint do fumante:

Instale e configure o Linux no GPD Pocket
É claro que as “janelas” e as “janelas 10” especialmente não são o que eu preciso neste dispositivo, mas são simplesmente contra-indicadas.
Devido aos recursos do dispositivo, como a orientação da tela (é girada para o lado), é impossível simplesmente pegar e instalar o seu Debian favorito sem dançar com um pandeiro.

Em princípio, o site oficial tem a imagem oficial do Ubuntu LTS 16.04 (o que me parece uma boa alternativa ao Debian estável), mas depois de ler as discussões na Internet, foi decidido usar o projeto
GPD Pocket Ubuntu RespinEnfatizo, em geral, o óbvio de que apenas uma imagem criada no Ubuntu é adequada para uso e alimentação de um script, por exemplo, Debian, não funcionará:
$./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.
Na saída, obtemos o arquivo linuxium-xubuntu-16.04-desktop-amd64.iso, que gravamos na unidade flash USB:
#dd if=linuxium-xubuntu-16.04-desktop-amd64.iso of=/dev/sdX
Inicializamos a partir dele, definindo o dispositivo de inicialização, acessando as configurações UEFI com o botão Excluir na inicialização.
O procedimento de instalação é trivial, não vejo sentido em espalhar. Observo apenas que é melhor produzi-lo no modo Ao vivo, para que a tela não seja virada para o lado.
Uso criptografia de disco completa, caso o dispositivo seja perdido ou roubado de repente. Portanto, pelo menos, todas as suas chaves ssh (sim, eu sei sobre proteção por senha e ssh-agent) e os logins nos recursos da Internet permanecerão intactos. Portanto, coloquei o LVM em cima do LUKS, o que também desejo a você.
Corrija as curvulinas
Sono e hibernação
Seria bom poder jogar um laptop em uma bolsa e esquecê-lo até que seja necessário. Felizmente, tamanho e peso permitem. Seria bom não iniciar, a cada vez, manualmente os aplicativos necessários, mas simplesmente continuar trabalhando no local de onde você parou.
O modo de suspensão, ao que parece, funciona imediatamente. É implementado por meios regulares, ou seja, através do systemctl suspend. No entanto, empiricamente, verificou-se que o consumo de energia nesse modo não é muito inferior ao consumo ocioso. Aparentemente, o dispositivo simplesmente extingue a tela, faz interface com a rede e desliga o cooler. Como resultado, a bateria aterrará em zero dias para dois.
Precisa de hibernação. O hibernate normal do systemctl acabou inoperante: o estado é despejado em uma troca, mas não pode se recuperar na inicialização.
Lembrei-me de que existe esse projeto - o
Userspace Software Suspend e seus pacotes estão no repositório.
#apt install hibernate
Verificamos:
#hibernate-disk
Voila, funciona! O sistema despejou e desligou. Depois de inserir a senha LUKS, recuperado. Mas o som e o wifi foram cobertos, o brilho da luz de fundo da tela foi redefinido ao máximo. Nós vamos terminar.
Instale o necessário
Antes de prosseguir com a configuração da ACPI, você precisará instalar vários utilitários.
Portanto, para ajustar o brilho da tela é responsável pela luz de fundo.
#apt install xbacklight
O laptop não é um disco rígido, mas um flash drive, então não quero matá-lo com uma troca. Existe o
ZRam , aqui vamos usá-lo. Agora tudo é simples com isso, você não precisa prescrever planilhas no rc.local e precisa fazer o seguinte:
#apt install zram-config #sudo systemctl enable zram-config.service
O próprio script calculará a quantidade necessária de memória e fará um swapon.
Conforme observado corretamente nos comentários, o recurso flash consome não apenas a troca, mas também o log. Portanto, / tmp e / var / log serão colocados no ram no tmpfs. Para fazer isso, adicione duas linhas ao / etc / fstab:
tmpfs /tmp tmpfs nodev,nosuid,size=256M 0 0 tmpfs /var/log tmpfs nodev,nosuid,size=512M 0 0
Nós terminamos acpi
Primeiro, desative os manipuladores systemg'shnyh. Uma vez que faz tudo por seus próprios meios, mas eles são inoperantes. Lema - fazemos tudo, mas fazemos mal. Por exemplo, ele não aprendeu a lidar com a conexão de um adaptador de energia ou fones de ouvido, pressionamentos de teclas ou similares.
Ele comeu ácido e ainda está com fome! (4Mb) /etc/systemd/logind.conf
HandlePowerKey=ignore HandleLidSwitch=ignore
#systemctl restart systemd-logind.service
O daemon acpid é responsável pelo processamento de eventos acpi, cujos arquivos de configuração são armazenados repentinamente em / etc / acpi.
Enviaremos o laptop à hibernação pressionando o botão liga / desliga. Para fazer isso, edite os seguintes arquivos (se não estiverem, você precisa criar):
/ etc / acpi / events / powerbtn
event=button[ /]power action=/etc/acpi/hibernate.sh
/etc/acpi/hibernate.sh (com comentários)
Texto oculto #!/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
A hibernação automática a baixo custo não é fácil de implementar, mas muito simples:
#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
O script verifica o estado da carga. Se menos de 10%, ele executa o script de hibernação acima.
A execução periódica é definida via crontab:
$sudo crontab -e */3 * * * * /etc/acpi/ifbatlowgotosleep.sh 2>/dev/null
No meu caso, a bateria é pesquisada a cada 3 minutos.
O modo de suspensão (suspensão do systemctl), como mencionado acima, é bastante inútil. Portanto, não vejo razão para ativá-lo ao fechar a tampa. Além disso, pode haver um desejo, digamos, de ouvir música de um laptop fechado no seu bolso (não é à toa que se trata de "bolso").
Portanto, simplesmente desligamos a tela ao fechar e a ligamos ao abrir.
Exclua / etc / acpi / lidbtn.
Criamos e editamos:
/ 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"
Defina o valor do DPI ao seu gosto e user é o nome simples da minha conta (altere para o seu).
Configurando as teclas de controle de som e brilho
Fazemos isso através dos mesmos eventos 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
Scripts:
/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%-
Da mesma forma para brilho:
/ 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%"
Deixe-me lembrá-lo, usuário é o nome da minha conta. Digite o seu.
Auscultadores
Merda ^ W Um chip peculiar da Realtek ALC5645 não pode desligar independentemente os alto-falantes quando os fones de ouvido estão conectados. Você tem que ensinar ao sistema como fazer você mesmo.
Existe um script em respin:
Texto oculto #!/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
Mas isso não funciona. Tenta fazer uma alternância através do controle de sincronização do áudio, mas falha. Porque:
$sudo su #su user -c "pacmd set-sink-port alsa_output.platform-cht-bsw-rt5645.HiFi__hw_chtrt5645__sink '[Out] Speaker'" PulseAudio, .
A solução é simples: quando o processo de áudio ainda não foi chamado pelo cliente, não há nada para contatar o pacmd. Você pode, é claro, adicionar uma linha para iniciar esta em rc.local, xinitrc ou até escrever uma unidade systemg separada, mas achei que era melhor planejar minha própria muleta do que reparar outras. E eu escrevi meu próprio roteiro, muito menos monstruoso e sofisticado, eu acho.
/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
Tratamos o layout e outras pequenas coisas
Como já mencionado, o layout me enfurece. O botão excluir é o local onde a barra invertida e a barra devem estar, os dois pontos na linha inferior, não está claro por que o menu principal, guia, é onde a fuga ocorre nos teclados normais ...
Não pintarei em detalhes; com a análise, trarei meu ~ / .xmodmaprc e descreverei como isso é feito.
Para começar, precisamos pegar o código-chave. Isso é feito usando o programa xev (#apt install xev, yes). Execute, pressione a tecla desejada e obtenha uma saída como:
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
Precisamos do valor "keycode 119".
Em seguida, abra ~ / .xmodmaprc e escreva lá
keycode 119 = backslash bar backslash bar
E introduzimos a execução do "xmodmap ~ / .xmodmaprc" no seu xinitrc ou o que for chamado quando você inicia seu DE ou WM favorito.
Meu ~ / .xmodmaprc:
Texto oculto 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
Ele usa coisas dúbias para a maioria dos usuários, como transferir ctrl para caps-lock, tab para ctrl_l, alt_gr para menu e alternar o layout para a antiga posição altgr.
Eu também uso o xcape para emular pressionando escape com um único clique em ctrl_l. Chamado assim:
xcape -t 1000 -e "Control_L=Escape"
Como eu prefiro temas escuros que são mais confortáveis (tenho uma opinião, argumentam os rábanos) em condições de pouca luz, mas geralmente precisam trabalhar sob a luz do dia, há um pequeno truque: as cores da imagem podem ser invertidas. Para fazer isso, você precisa do programa xcalib:
#apt install xcalib
Inverter:
$xcalib -i -a
Você pode vincular a qualquer tecla de acesso conveniente usando o gerenciador de janelas. Estou pendurado no Super_L + Backspace.
Sumário
As impressões do dispositivo são mais positivas que negativas. Não me arrependo do dinheiro gasto. O dispositivo não ocupa muito espaço na bolsa, cabe no bolso da calça cargo e na jaqueta de fumaça.

Funciona por muito tempo com a bateria, para o teste eu rolei três horas e meia de filmes com wifi ligado, descarregado em algum lugar pela metade. Carrega de um banco de paver com usb-a através de um adaptador de corrente alternada.
Todas as curvulinas moles encontradas foram tratadas com sucesso.
É lamentável que não exista uma porta rj45, mas espero que seja resolvida pelo adaptador encomendado com usb. A falta de comunicações móveis e câmeras, agora, em condições de vigilância total, acho um pouco mais.