Sou um usuário Linux de longa data (ubuntu-budgie 24.04) testando VMs recentemente. Segui esta receita para criar uma VM QEMU executando o GhostBSD 24.04.2. Funciona muito bem na linha de comando usando qemu-system-x86_64. Como faço para que esse vm apareça nas gnome-boxes?
A seguinte função Bash deu resultados inconsistentes:
# $1 Path to ZIP archive.
# Exits with 0 status iff it contains a “.mp3” or “.flac” file.
mp3_or_flac_in_zip() {
local archive=${1:?No archive given.}
(
set -o pipefail
unzip -l "$archive" | grep -iqE '.\.(flac|mp3)$'
)
}
Quando executado n vezes seguidas no mesmo ZIP contendo música, ele relatou aleatoriamente que não havia música nele (cerca de 1–5% das vezes, mas variou muito entre os ZIPs).
Mudar para uma variável intermediária em vez de um pipe (com &&
instead of set -o pipefail
para ainda ter certeza de unzip
que estava funcionando bem) corrigiu as inconsistências:
# $1 Path to ZIP archive.
# Exits with 0 status iff it contains a “.mp3” or “.flac” file.
mp3_or_flac_in_zip() {
local archive=${1:?No archive given.}
local listing
listing=$(unzip -l "$archive") &&
grep -iqE '.\.(flac|mp3)$' <<< "$listing"
}
Qual poderia ser o problema aí? E há outros contextos em que pipes não são uma ideia tão boa?
No Mutt, eu gostaria de configurar algo parecido com a ação de filtro de mensagem "Responder com Modelo" do Thunderbird. Ou seja, para uma determinada mensagem, eu gostaria de poder facilmente (leia-se: atalho de teclado) enviar uma resposta com assunto e corpo predefinidos. Isso é possível?
Obrigado.
Estou tentando filtrar endereços IP do ip a
comando via sed
. Quando escrevo, inet6*
funciona. Quando escrevo, inet6?
não encontra a correspondência.
Com *
:
$ ip a | sed -ne 's,^ *inet6* \([^ /]*\).*$,\1,p'
05:06:33
127.0.0.1
::1
192.168.43.222
fe80::df04:ee5d:a05f:ba1
Com ?
:
$ ip a | sed -ne 's,^ *inet6? \([^ /]*\).*$,\1,p'
05:07:39
Quando tento executar com +
em vez *
disso também não funciona:
$ ip a | sed -ne 's,^ *inet6* \([^ /]+\).*$,\1,p'
05:35:21
Sed funciona com ?
ou +
? Ou só funciona com *
?
Eu sei que posso redimensionar uma imagem com o ImageMagick usando -resize
ou -scale
, mas como posso remodelar uma imagem com o ImageMagick? Se eu usar -resize
ou -scale
:
magick image.png -resize 160x a.png
magick image.png -scale 160x b.png
Eu vou conseguir isso:
Mas eu quero ter exatamente o mesmo número de pixels com exatamente os mesmos valores e exatamente na mesma ordem, mas eles serão "refluidos" se for uma palavra em uma forma diferente.
Já descobri como fazer isso com Python Imaging Library e Numpy. Minha imagem inicial é 80x80 e fica assim:
from PIL import Image
import numpy as np
image = Image.open('a.png').convert('RGB')
npArray = np.array(image)
Image.fromarray(npArray.reshape(-1,160,3)).save('largeur160.png')
Image.fromarray(npArray.reshape(-1,40,3)).save('largeur40.png')
Image.fromarray(npArray.reshape(-1,10,3)).save('largeur10.png')
Eu recebo essas imagens com largura 160 e 40 e 10:
Quando executo ls -l /dev
no meu Ubuntu, recebo uma saída como esta:
$ ls -l /dev
total 0
crw-r--r-- 1 root root 10, 235 Aug 24 16:36 autofs
drwxr-xr-x 2 root root 340 Aug 24 16:40 block
crw------- 1 root root 10, 234 Aug 24 16:36 btrfs-control
drwxr-xr-x 2 root root 2660 Aug 24 16:37 char
A 10, 235
quinta coluna mostra os números maiores e menores que especificam qual driver de dispositivo é usado para gerenciar o arquivo.
Quando executo o mesmo comando no macOS, recebo esta saída:
% ls -l /dev
total 1
crw-rw-rw- 1 root wheel 0x16000000 14 Aug 22:16 aes_0
crw------- 1 root wheel 0x15000001 14 Aug 22:16 afsc_type5
brw------- 1 root operator 0x2000000 24 Aug 19:39 apfs-raw-device.2.0
crw------- 1 root wheel 0xb000001 14 Aug 22:16 auditpipe
Em vez dos números maiores/menores, recebo um único número hexadecimal. Minha pergunta é: o que esses números hexadecimais representam?
O que eu tentei/pesquisei
Existem arquivos diferentes que compartilham o mesmo hexadecimal. Então não parece representar os números maiores/menores, pois, pelo que entendi, essa combinação deveria ser única?
brw-r----- 1 root operator 0x1000001 14 Aug 22:16 disk0s1 crw-r----- 1 root operator 0x1000001 14 Aug 22:16 rdisk0s1
ChatGPT tenta me convencer de que o número hexadecimal é um formato compactado para os números maiores e menores, mas não estava sendo muito claro sobre como interpretá-lo. Se eu dividir os 32 bits em metades e interpretar os primeiros 16 bits como maiores e os últimos 16 bits como menores, o número maior parecerá extraordinariamente grande (por exemplo,
0x1d000000
dá7424
como o número maior.Instalar o
coreutils
pacote no meu Mac e usá-ls
lo me deu os familiares pares maiores/menores.$ /opt/homebrew/Cellar/coreutils/9.5/libexec/gnubin/ls -l /dev total 1 crw-rw-rw- 1 root wheel 22, 0 Aug 14 22:16 aes_0 crw------- 1 root wheel 21, 1 Aug 14 22:16 afsc_type5 brw------- 1 root operator 2, 0 Aug 24 21:02 apfs-raw-device.2.0 crw------- 1 root wheel 11, 1 Aug 14 22:16 auditpipe ... brw-r----- 1 root operator 1, 1 Aug 14 22:16 disk0s1 ... crw-r----- 1 root operator 1, 1 Aug 14 22:16 rdisk0s1
As informações de saída muito úteis xwininfo
como esta:
Absolute upper-left X: 1261
Absolute upper-left Y: 53
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 1252
Height: 2320
Depth: 32
Visual: 0x2d8
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x3e000af (not installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +1261+53 -1327+53 -1327-27 +1261-27
-geometry 1252x2320+1256+0
Minha pergunta: qual é o depth
parâmetro? é profundidade de cor? a man xwininfo
página não diz.
Obrigado!
Objetivo: estou tentando matar o gpg-agent (no Debian 12, se isso importa) e mantê-lo morto para sempre.
À parte: Por quê?
Porque acabei de configurar o encaminhamento do agente GPG para meu servidor SSH. Tentei alguns guias sem sucesso até encontrar este , que sugere:
$ gpg-connect-agent KILLAGENT /bye
no host remoto. Com isso, o encaminhamento de agente GPG finalmente funciona...
... mas se eu fizer login de outro cliente (um que não encaminhe seu soquete gpg-agent para o host remoto), o systemd iniciará o gpg-agent novamente :
# Killing gpg-agent ---------------------------------------------
$ ssh <host>
$ gpg-connect-agent KILLAGENT /bye
OK closing connection
$ exit
logout
Connection to <host> closed
# Logging in with GPG socket forwarding: gpg-agent stays dead ---
$ ssh <host>
$ pgrep gpg-agent
# 👌 no output
$ gpg --list-secret-keys
/home/rlue/.config/gnupg/pubring.kbx
------------------------------------
sec rsa3072/... # 🎉 it works!
$ exit
logout
Connection to <host> closed
# Logging in from another client: gpg-agent is back -------------
$ ssh <host>
$ pgrep gpg-agent
17077 # 🤬 bad systemd!
Como você sabe que é systemd?
$ pstree --show-parents --show-pids $(pidof gpg-agent)
systemd(1)---systemd(663)---gpg-agent(17077)
O que é intrigante porque...
Tudo isso está acontecendo depois de executar:
$ systemctl --user mask --now gpg-agent.service gpg-agent.socket gpg-agent-ssh
.socket gpg-agent-extra.socket gpg-agent-browser.socket
$ systemctl --user daemon-reload
Eu até reiniciei (veja Uptime
na seção final). Para referência, aqui está o status de todas as unidades do usuário systemd:
$ systemctl --user list-unit-files
UNIT FILE STATE PRESET
app-print\[email protected] generated -
at-spi-dbus-bus.service static -
dbus.service static -
dcim-transfer.photein.service disabled enabled
dcim-transfer.xferase.service disabled enabled
dconf.service static -
dirmngr.service static -
glib-pacrunner.service static -
gnubiff.service enabled enabled
gpg-agent.service masked enabled
pipewire-pulse.service enabled enabled
pipewire.service enabled enabled
pk-debconf-helper.service static -
shpool.service enabled enabled
ssh-agent.service static -
systemd-exit.service static -
systemd-tmpfiles-clean.service static -
systemd-tmpfiles-setup.service disabled enabled
wireplumber.service enabled enabled
[email protected] disabled enabled
xdg-desktop-portal-gtk.service static -
xdg-desktop-portal-rewrite-launchers.service enabled enabled
xdg-desktop-portal.service static -
xdg-document-portal.service static -
xdg-permission-store.service static -
xferase.service disabled enabled
app.slice static -
background.slice static -
session.slice static -
dbus.socket static -
dirmngr.socket enabled enabled
gpg-agent-browser.socket masked enabled
gpg-agent-extra.socket masked enabled
gpg-agent-ssh.socket masked enabled
gpg-agent.socket masked enabled
pipewire-pulse.socket enabled enabled
pipewire.socket enabled enabled
pk-debconf-helper.socket enabled enabled
shpool.socket enabled enabled
basic.target static -
bluetooth.target static -
default.target static -
exit.target static -
graphical-session-pre.target static -
graphical-session.target static -
paths.target static -
printer.target static -
shutdown.target static -
smartcard.target static -
sockets.target static -
sound.target static -
timers.target static -
xdg-desktop-autostart.target static -
systemd-tmpfiles-clean.timer disabled enabled
54 unit files listed.
O que dá? Qualquer indicação seria profundamente apreciada.
SO e outros detalhes
$ neofetch
_,met$$$$$gg. rlue@<host>
,g$$$$$$$$$$$$$$$P. -------------
,g$$P" """Y$$.". OS: Debian GNU/Linux 12 (bookworm) x86_64
,$$P' `$$$. Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-5.2)
',$$P ,ggs. `$$b: Kernel: 6.1.0-23-amd64
`d$$' ,$P"' . $$$ Uptime: 38 mins
$$P d$' , $$P Packages: 1549 (dpkg)
$$: $$. - ,d$$' Shell: bash 5.2.15
$$; Y$b._ _,d$P' Resolution: 1024x768
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/0
`$$b "-.__ CPU: Intel Xeon E5-2690 v2 (4) @ 2.999GHz
`Y$$ GPU: 00:02.0 Vendor 1234 Device 1111
`Y$$. Memory: 3024MiB / 7940MiB
`$$b.
`Y$$b.
`"Y$b._
`"""
Usando zsh
:
width=7.25; echo $(( width * 2 ))
: a saída é14.5
width=7.5; echo $(( width * 2 ))
: a saída é15.
, com um ponto final
Isso parece ser uma coisa muito básica, mas ainda não descobri. Como posso obter apenas 15
, sem o ponto final, no segundo exemplo?
Esta é uma pergunta para iniciantes em redes. Tentei encontrar uma solução na web, mas sem sucesso.
Objetivo: Estabelecer uma conexão TCP/IP via Ethernet diretamente entre meu PC host Linux e uma placa STM32MP157, para que eu pudesse enviar e receber pacotes usando soquetes C e programas cliente/servidor simples ( como estes ).
- Nesta questão estou me referindo ao BeagleBone Black como um caso de teste extra. Presumo que tudo o que está faltando é relevante para ambos, mas lembre-se de que meu objetivo é comunicar-me com a placa STM32MP1.
PC host: Kernel versão 5.15.0-117-genérico
Detalhes: Realizei alguns testes, conectando o cabo Ethernet em diversas situações, e é isso que surge:
Quando eu conecto meu host Linux diretamente ao meu roteador doméstico, a conexão é estabelecida, IPv4:
10.100.102.47/24
Quando conecto o STM32MP1 diretamente ao meu roteador doméstico, a conexão é estabelecida:
root@stm32mp1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 10:e7:7a:e1:8b:a4 brd ff:ff:ff:ff:ff:ff
altname ethernet0
altname ethernet0.ethernet
inet 10.100.102.46/24 metric 10 brd 10.100.102.255 scope global dynamic end0
valid_lft 3568sec preferred_lft 3568sec
inet6 fe80::12e7:7aff:fee1:8ba4/64 scope link
valid_lft forever preferred_lft forever
3: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 7e:8f:a7:2e:04:e5 brd ff:ff:ff:ff:ff:ff
root@stm32mp1:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=7.27 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=6.17 ms
- Quando conecto o BBB direto ao meu roteador doméstico, a conexão é estabelecida:
root@bela:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether e0:ff:f1:d8:ee:5d brd ff:ff:ff:ff:ff:ff
inet 10.100.102.44/24 brd 10.100.102.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::e2ff:f1ff:fed8:ee5d/64 scope link
valid_lft forever preferred_lft forever
3: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether be:1a:f1:d8:ee:5f brd ff:ff:ff:ff:ff:ff
inet 192.168.6.2/24 brd 192.168.6.255 scope global usb0
valid_lft forever preferred_lft forever
inet6 fe80::bc1a:f1ff:fed8:ee5f/64 scope link
valid_lft forever preferred_lft forever
4: usb1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether be:1a:f1:d8:ee:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.7.2/24 brd 192.168.7.255 scope global usb1
valid_lft forever preferred_lft forever
inet6 fe80::bc1a:f1ff:fed8:ee62/64 scope link
valid_lft forever preferred_lft forever
root@bela:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=6.36 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=5.79 ms
192.168.6.2/24 e 192.168.7.2/24 são atribuídos antes da conexão ao roteador.
- Quando conecto o STM32MP1 (assim como o BBB) diretamente ao meu PC host Linux, a conexão não é estabelecida:
root@stm32mp1:~#
[ 65.854953] stm32-dwmac 5800a000.ethernet end0: Link is Up - 1Gbps/Full - flow control rx/tx
[ 65.862162] IPv6: ADDRCONF(NETDEV_CHANGE): end0: link becomes ready
root@stm32mp1:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 10:e7:7a:e1:8b:a4 brd ff:ff:ff:ff:ff:ff
altname ethernet0
altname ethernet0.ethernet
inet6 fe80::12e7:7aff:fee1:8ba4/64 scope link
valid_lft forever preferred_lft forever
3: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether e2:40:83:22:5d:7a brd ff:ff:ff:ff:ff:ff
root@stm32mp1:~#
Emitir:
A verificação nº 1 mostra que a porta Ethernet do meu host pode funcionar.
As verificações nº 2,3 mostram que as portas Ethernet das placas alvo são capazes de funcionar.
A verificação nº 4 mostra que a conexão não foi estabelecida entre o host e um quadro de destino.
Em vez disso, ao conectar o host e o STM32MP1: Enquanto o cabo estiver conectado, uma mensagem de erro dizendo “Falha na conexão: falha na ativação da conexão de rede” apareceria na tela do host periodicamente.
Como isso pode ser resolvido? Obrigado
Informações adicionais: Se eu conectar o destino (cabo eth) e o host (sem fio) ao roteador, consigo me comunicar pela rede. Mas preciso de uma conexão direta entre a máquina, sem o roteador no meio.
O guia do STM sobre como configurar a interface Ethernet do STM32MP1 sugere:
If a DHCP server is not available, one can set the Ethernet IP address with :
Board $> ifconfig end0 uuu.xxx.yyy.zzz
Eu fiz isso, mas não importa porque a conexão nunca é estabelecida com o host.