Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.
Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.
V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.
VST 3 je nově pod licencí MIT. S verzí 3.8.0 proběhlo přelicencování zdrojových kódů z licencí "Proprietary Steinberg VST3 License" a "General Public License (GPL) Version 3". VST (Virtual Studio Technology, Wikipedie) je softwarové rozhraní pro komunikaci mezi hostitelským programem a zásuvnými moduly (pluginy), kde tyto moduly slouží ke generování a úpravě digitálního audio signálu.
Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 25.10. Podrobný přehled novinek v poznámkách k vydání.
V Londýně probíhá dvoudenní Ubuntu Summit 25.10. Na programu je řada zajímavých přednášek. Zhlédnout je lze také na YouTube (23. 10. a 24. 10.).
Gemini CLI umožňuje používání AI Gemini přímo v terminálu. Vydána byla verze 0.10.0.
Konference OpenAlt 2025 proběhne již příští víkend 1. a 2. listopadu v Brně. Nabídne přibližně 80 přednášek a workshopů rozdělených do 7 tematických tracků. Program se může ještě mírně měnit až do samotné konference, a to s ohledem na opožděné úpravy abstraktů i případné podzimní virózy. Díky partnerům je vstup na konferenci zdarma. Registrace není nutná. Vyplnění formuláře však pomůže s lepším plánováním dalších ročníků konference.
Samsung představil headset Galaxy XR se 4K Micro-OLED displeji, procesorem Snapdragon XR2+ Gen 2, 16 GB RAM, 256 GB úložištěm, operačním systémem Android XR a Gemini AI.
Před konferencí Next.js Conf 2025 bylo oznámeno vydání nové verze 16 open source frameworku Next.js (Wikipedie) pro psaní webových aplikací v Reactu. Přehled novinek v příspěvku na blogu.
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! 