Stát Kalifornie zažaloval výrobce 3D tiskových filamentů Polymaker. Vrchní soud San Diego County tvrdí, že firma propagací svých výrobků mezi příznivci 3D tištěných zbraní podporovala výrobu takzvaných 'ghost guns' (DIY zbraní) a že její PLA filament pro 3D tiskárny lze za těchto okolností považovat za součást určenou k výrobě střelné zbraně. Žaloba požaduje mimo jiné finanční sankce a soudní zákaz činnosti, Polymaker se hájí tím, že filament je běžný a sám o sobě legální produkt. Celý text žaloby (PDF na Google Drive).
V červnu byla představena aplikace Myna pro převod řeči na text v prostředí desktopu Ubuntu. Včera byla Myna zpřístupněna širší komunitě Ubuntu formou technologické ukázky dostupné v Ubuntu 24.04 LTS, Ubuntu 26.04 LTS a Ubuntu 26.10 s GNOME na Waylandu.
Ubuntu 27.04 bude Tenacious T-Rex.
Byla vydána nová verze 2026.4.0 "Never-slop" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. ScummVM oslavil 25 let. Verze 0.0.1 vyšla 8. října 2001.
Kanadský vývojář Anthony Sistilli vytvořil ironický DIY projekt parodující kamerové systémy Flock, s cílem názorně demonstrovat rizika masového sledování jaké provozují tyto komerční ALPR systémy. Z levné IP kamery a vlastního ML softwaru (napsaného s pomocí SI circa za 20 minut, kód se mi bohužel nepodařilo dohledat) běžícího v laptopu sestavil jednoduchý systém, který detekuje výhradně policejní vozidla, zaznamenává jejich SPZ a
… více »Část údajů uživatelů internetového supermarketu Rohlík byla odcizena. Kyberútočníci napadli nástroj zákaznické podpory Rohlíku, odcizili tak jména, e-mailové adresy, v některých případech také telefonní čísla nebo přepisy komunikace mezi klienty a zákaznickou podporou. Rohlík incident nahlásil příslušným orgánům a přijal příslušné opatření, aby zamezil podobným případům v budoucnosti, uvedla firma.
Aplikace eDoklady fungovala v obou volebních dnech stabilně a prakticky bez front. Digitální a informační agentura (DIA) odhaduje, že se digitálním dokladem prokázalo více než 100.000 voličů. Aplikaci si před volbami či během nich aktualizovalo 247.517 uživatelů. Nových registrací bylo 19.431 a do aplikace se přihlásilo 357.879 lidí. Největší nápor přišel bezprostředně po otevření volebních místností mezi 14. a 16. hodinou, kdy si
… více »Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do
… více »Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.
Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.
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! 