1. července Mozilla vypne službu Fakespot pro detekci podvodných recenzí v internetových obchodech. Mozilla koupila Fakespot v květnu 2023.
8. července Mozilla vypne službu Pocket (Wikipedie) pro ukládání článků z webu na později. Do 8. října si uživatelé mohou vyexportovat data. Mozilla koupila Pocket v únoru 2017. Několik měsíců byl Pocket integrovanou součástí Firefoxu.
Turris OS má aktuálně problém s aktualizací související s ukončením podpory protokolu OCSP u certifikační autority Let's Encrypt.
Nevidomý uživatel Linuxu v blogu upozornil na tristní stav přístupnosti na linuxovém desktopu (část první, druhá, závěr), přičemž stížnosti jsou podobné jako v roce 2022. Vyvolal bouřlivou odezvu. Následně např. Georges Stavracas shrnul situaci v GNOME. Debata o jiném aspektu přístupnosti, emulaci vstupu pod Waylandem, také proběhla na Redditu.
DevConf.CZ 2025, tj. open source komunitní konference sponzorovaná společností Red Hat, proběhne od 12. do 14. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.
Byla vydána nová major verze 28.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Přehled novinek v příspěvku na blogu.
Český telekomunikační úřad zveřejnil Výroční zprávu za rok 2024 (pdf), kde shrnuje své aktivity v loňském roce a přináší i základní popis situace na trhu. Celkový objem přenesených mobilních dat za rok 2024 dosáhl dle odhadu hodnoty přibližně 1,73 tis. PB a jeho meziroční nárůst činí zhruba 30 %. Průměrná měsíční spotřeba dat na datovou SIM kartu odhadem dosáhla 12,5 GB – v předchozím roce šlo o 9,8 GB.
Z novinek představených na Google I/O 2025: Přehledy od AI (AI Overviews) se rozšiřují do dalších zemí. Užitečné, syntetizované přehledy od generativní AI jsou nově k dispozici i českým uživatelům Vyhledávače.
Šestice firem označovaných jako „MAMAAN“ – tedy Meta (Facebook, Instagram), Alphabet (Google), Microsoft, Apple, Amazon a Netflix – je zodpovědná za více než padesát procent světového internetového provozu. Dalšími velkými hráči jsou TikTok a Disney+. Společně tak zásadně určují podobu digitálního prostředí, spotřebitelského chování i budoucích trendů v oblasti technologií. I přesto, že se podíl těchto gigantů od roku 2023 o něco snížil, jejich dominantní postavení zvyšuje volání po regulaci.
Evropská komise (EK) navrhuje zavést plošný poplatek ve výši dvou eur (zhruba 50 Kč) za každý malý balík vstupující do Evropské unie. Poplatek se má týkat balíků v hodnotě do 150 eur (zhruba 3700 Kč), které v EU nepodléhají clu. V loňském roce bylo do EU doručeno kolem 4,6 miliardy takovýchto balíků. Poplatek má krýt náklady na kontroly rostoucího počtu zásilek levného zboží, které pochází především z Číny.
Tak jsem zkoumal, kterak by šel občas taky vypnout TrackPoint, nakonec z toho vylezlo celkem dost skriptů :).
První skript slouží ke spuštění příkazu pod uživatelem v X serveru, a to buď na aktuálně zobrazeném X serveru, nebo na všech běžících.
#!/bin/bash command="$2" getXuser() { user=$(who | grep -m1 "$DISPLAY " | awk '{print $1}') if [ $user = "" ]; then user=$(who | grep -m1 "$DISPLAY" | awk '{print $1}') fi if [ $user != "" ]; then userhome=$(getent passwd $user | cut -d: -f6) export XAUTHORITY=$userhome/.Xauthority else export XAUTHORITY="" fi } runXcommand() { getXuser echo "Display: $DISPLAY" echo "User: $user" echo "XAuthority: $XAUTHORITY" if [ "$DISPLAY" != "" ] && [ "$user" != "" ]; then echo "RUN: $command" su $user -c "$command" fi } Usage() { echo "usage: ${0/*\/} {all|actual} <command>" exit 1 } [ $# -gt 2 ] && Usage case "$1" in "all") for display in $(who | awk '{print $2}' | grep -E ':[0-9]+'); do export DISPLAY=$display runXcommand done ;; "actual") displaynum=$(ps ax | grep -m1 -e '[X] .* vt'$(fgconsole) | sed -re 's|.*/X .*:([0-9]+).*|\1|') export DISPLAY=":$displaynum" runXcommand ;; *) Usage ;; esac
Hodí se ke spouštění následujících dvou skriptů, například, při spouštění přes ACPI tlačítka.
Skript pro přepínání stavu UltraNav
#!/bin/bash TRACKPOINT_NAME="trackpoint" TRACKPOINT='TPPS/2 IBM TrackPoint' TOUCHPAD_NAME="touchpad" TOUCHPAD='SynPS/2 Synaptics TouchPad' Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle [device]" echo "device: $TRACKPOINT_NAME" echo " $TOUCHPAD_NAME" echo "toggle order: 1) $TRACKPOINT_NAME enable" echo " $TOUCHPAD_NAME disable" echo " 2) $TRACKPOINT_NAME disable" echo " $TOUCHPAD_NAME enable" echo " 3) $TRACKPOINT_NAME disable" echo " $TOUCHPAD_NAME disable" echo " 4) $TRACKPOINT_NAME enable" echo " $TOUCHPAD_NAME enable" exit 1 } GetState() { echo $(/usr/bin/xinput list-props "$1" | grep "Device Enabled" | cut -f2 -d:) } Status() { case "$1" in "$TRACKPOINT") DEVICE="$TRACKPOINT_NAME" ;; "$TOUCHPAD") DEVICE="$TOUCHPAD_NAME" ;; esac if [ $(GetState "$1") = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$DEVICE: $STATUS" } SetState() { /usr/bin/xinput set-int-prop "$1" "Device Enabled" "8" "$2" } Enable() { SetState "$1" 1 } Disable() { SetState "$1" 0 } Toggle() { if [ $(GetState "$1") = "1" ]; then STATE=0 else STATE=1 fi SetState "$1" "$STATE" } [ $# -gt 2 ] && Usage case "$1" in "status") COMMAND="Status" ;; "enable") COMMAND="Enable" ;; "disable") COMMAND="Disable" ;; "toggle") COMMAND="Toggle" if [ -z "$2" ]; then if [ $(GetState "$TRACKPOINT") = "1" -a $(GetState "$TOUCHPAD") = "1" ]; then SetState "$TRACKPOINT" 1 SetState "$TOUCHPAD" 0 elif [ $(GetState "$TRACKPOINT") = "1" -a $(GetState "$TOUCHPAD") = "0" ]; then SetState "$TRACKPOINT" 0 SetState "$TOUCHPAD" 1 elif [ $(GetState "$TRACKPOINT") = "0" -a $(GetState "$TOUCHPAD") = "1" ]; then SetState "$TRACKPOINT" 0 SetState "$TOUCHPAD" 0 else SetState "$TRACKPOINT" 1 SetState "$TOUCHPAD" 1 fi exit fi ;; *) Usage ;; esac case "$2" in "$TRACKPOINT_NAME") $COMMAND "$TRACKPOINT" ;; "$TOUCHPAD_NAME") $COMMAND "$TOUCHPAD" ;; "") $COMMAND "$TRACKPOINT" $COMMAND "$TOUCHPAD" ;; *) Usage esac
Notně vylepšený skript pro přepínání interního-externího displeje
#!/bin/bash INTERNAL_NAME='internal' INTERNAL='LVDS' EXTERNAL_NAME='external' EXTERNAL='VGA' EXTERNAL_EXPAND="left-of" Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle [device]" echo "device: $INTERNAL_NAME" echo " $EXTERNAL_NAME" echo "toggle order: 1) $INTERNAL_NAME enable" echo " $EXTERNAL_NAME disable" echo " 2) $INTERNAL_NAME disable" echo " $EXTERNAL_NAME enable" echo " 3) $INTERNAL_NAME enable" echo " $EXTERNAL_NAME enable" exit 1 } GetState() { if /usr/bin/xrandr | grep -q -E '^'"$1"' connected .+\('; then echo 1 else echo 0 fi } Status() { case "$1" in "$EXTERNAL") DEVICE="$EXTERNAL_NAME" ;; "$INTERNAL") DEVICE="$INTERNAL_NAME" ;; esac if [ $(GetState "$1") = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$DEVICE: $STATUS" } GetOther() { case "$1" in "$EXTERNAL") echo "$INTERNAL" ;; "$INTERNAL") echo "$EXTERNAL" ;; esac } SetState() { OTHER="$(GetOther "$1")" if [ "$2" = "0" -a $(GetState "$OTHER") = "0" ]; then /usr/bin/xrandr --output "$OTHER" --auto [ $(GetState "$OTHER") != "0" ] && /usr/bin/xrandr --output "$1" --off elif [ "$2" = "0" ]; then /usr/bin/xrandr --output "$1" --off else /usr/bin/xrandr --output "$1" --auto if [ $(GetState "$1") != "0" -a $(GetState $OTHER) != "0" ]; then /usr/bin/xrandr --output "$INTERNAL" --"$EXTERNAL_EXPAND" "$EXTERNAL" fi fi true } Enable() { SetState "$1" 1 } Disable() { SetState "$1" 0 } Toggle() { if [ $(GetState "$1") = "1" ]; then STATE=0 else STATE=1 fi SetState "$1" "$STATE" } [ $# -gt 2 ] && Usage case "$1" in "status") COMMAND="Status" ;; "enable") COMMAND="Enable" ;; "disable") COMMAND="Disable" ;; "toggle") COMMAND="Toggle" if [ -z "$2" ]; then if [ $(GetState "$INTERNAL") = "1" -a $(GetState "$EXTERNAL") = "1" ]; then SetState "$INTERNAL" 1 SetState "$EXTERNAL" 0 elif [ $(GetState "$INTERNAL") = "1" -a $(GetState "$EXTERNAL") = "0" ]; then SetState "$EXTERNAL" 1 SetState "$INTERNAL" 0 else SetState "$INTERNAL" 1 SetState "$EXTERNAL" 1 fi exit fi ;; *) Usage ;; esac case "$2" in "$INTERNAL_NAME") $COMMAND "$INTERNAL" ;; "$EXTERNAL_NAME") $COMMAND "$EXTERNAL" ;; "") $COMMAND "$INTERNAL" $COMMAND "$EXTERNAL" ;; *) Usage esac
Další skript je pro přepínání stavu UltraConnect, funguje jen pokud ho spustí root.
#!/bin/bash WLAN_MODULE="iwlagn" WLAN_IFACE="wlan0" WLAN_NAME="wifi" BT_CTRL_FILE="/sys/devices/platform/thinkpad_acpi/bluetooth_enable" BT_NAME="bluetooth" Usage() { echo "usage: ${0/*\/} status [device]" echo " ${0/*\/} enable [device]" echo " ${0/*\/} disable [device]" echo " ${0/*\/} toggle <device>" echo "device: $WLAN_NAME" echo " $BT_NAME" exit 1 } WlanPowerSave() { /usr/sbin/iwconfig "$WLAN_IFACE" power on } GetWlanState() { if [ -d "/sys/module/$WLAN_MODULE" ]; then echo 1 else echo 0 fi } SetWlanState() { if [ "$1" -eq 0 ]; then /sbin/modprobe -r "$WLAN_MODULE" else /sbin/modprobe "$WLAN_MODULE" WlanPowerSave fi } ToggleWlan() { if [ $(GetWlanState) = "0" ]; then SetWlanState 1 else SetWlanState 0 fi } GetBTState() { cat $BT_CTRL_FILE } SetBTState() { echo "$1" > "$BT_CTRL_FILE" } ToggleBT() { if [ $(GetBTState) = "0" ]; then SetBTState 1 else SetBTState 0 fi } Status() { case "$1" in "$WLAN_NAME") STATE=$(GetWlanState) ;; "$BT_NAME") STATE=$(GetBTState) ;; esac if [ $STATE = "1" ]; then STATUS="enabled" else STATUS="disabled" fi echo -e "$1: $STATUS" } [ $# -gt 2 ] && Usage case "$1" in "status") case "$2" in "$WLAN_NAME"|"$BT_NAME") Status "$2" ;; "") Status "$WLAN_NAME" Status "$BT_NAME" ;; *) Usage ;; esac ;; "enable"|"disable") case $1 in "enable") STATE="1" ;; "disable") STATE="0" ;; esac case "$2" in "$WLAN_NAME") SetWlanState "$STATE" ;; "$BT_NAME") SetBTState "$STATE" ;; "") SetWlanState "$STATE" SetBTState "$STATE" ;; *) Usage ;; esac ;; "toggle") case "$2" in "$WLAN_NAME") ToggleWlan ;; "$BT_NAME") ToggleBT ;; *) Usage ;; esac ;; *) Usage ;; esac
Poslední je vylepšený skript pro UltraBay
#!/bin/bash DEFAULT_DEVICE="/sys/class/scsi_device/1:0:0:0/device" FORCE_SLEEP="1" QUIET="0" Message() { if [ $QUIET = "0" ]; then echo "${0/*\//}: $*" else true fi } Block2Device() { /bin/readlink -e "/dev/block/$1" } IsSwap() { /sbin/swapon -s | grep -q -e "^$1\b" } IsMounted() { mount | grep -q -e "^$DEVICE\b" } ReleaseDevice() { if IsMounted "$1"; then if ! umount "$1" &> /dev/null; then Message "cannot umount $DEVICE" false fi elif IsSwap "$1"; then if ! /sbin/swapoff "$1" &> /dev/null; then Message "cannot disable swapping on $DEVICE" false fi fi } SleepDrive() { if ! /sbin/hdparm -Y "$1" &> /dev/null; then Message "cannot put drive to sleep" if [ $FORCE_SLEEP = "0" ]; then true else false fi fi } DeleteScsiDevice() { if ! { echo 1 > $SCSI_DEVICE/delete; } &> /dev/null; then Message "cannot delete device" false fi } GetDock() { grep "$1" /sys/devices/platform/dock.*/type | sed -e s%/type:.*%% } IsDocked() { [ $(cat $(GetDock "$1")/docked) -ne 0 ] } Undock() { { echo 0 > $(GetDock "$1")/undock; } &> /dev/null ! IsDocked "$1" } SCSI_DEVICE="$DEFAULT_DEVICE" for PARAM in $*; do if [ "$PARAM_DEVICE" ]; then SCSI_DEVICE="$PARAM" else case "$PARAM" in "--quiet"|"-q") QUIET="1" ;; "--no-force-sleep"|"-n") FORCE-SLEEP="0" ;; "--device"|"-d") PARAM_DEVICE="1" ;; *) echo "usage: ${0/*\/} [options]" echo "options:" echo " -q --quiet No messages" echo " -n --no-force-sleep Ignore fail when putting drive to sleep" echo " -d --device <path> SCSI device, default: $DEFAULT_DEVICE" exit 1 ;; esac fi done if [ -d $SCSI_DEVICE ] && IsDocked "ata_bay"; then sync for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2> /dev/null); do DEVICE=$(Block2Device "$BLOCK") && ReleaseDevice "$DEVICE" || FAIL="1" done if [ $FAIL ]; then exit 1 fi sync BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2> /dev/null) && DEVICE=$(Block2Device "$BLOCK") && SleepDrive "$DEVICE" || exit 1 sleep 3 DeleteScsiDevice "$SCSI_DEVICE" || exit 1 sleep 1 fi if [ ! -d $SCSI_DEVICE ] && $(IsDocked "ata_bay"); then if Undock "ata_bay"; then Message "AtaBay undocked" exit 0 else Message "cannot undock AtaBay" exit 1 fi fi if $(IsDocked "battery_bay"); then if Undock "battery_bay"; then Message "BatteryBay undocked" exit 0 else Message "cannot undock BatteryBay" exit 1 fi fi Message "UltraBay is already undock" exit 1
No a nakonec, užijte si to :_).
Tiskni
Sdílej:
A na ThinkWiki s nimi!