@aard@kyu.de
@aard@kyu.de avatar

aard

@aard@kyu.de

This profile is from a federated server and may be incomplete. Browse more on the original instance.

aard,
@aard@kyu.de avatar

The problems come when the woman turns around and keeps closing the notebook with her breasts.

What's (are) the funniest/stupidest way(s) you've broken your linux setup?

Tinkering is all fun and games, until it’s 4 am, your vision is blurry, and thinking straight becomes a non-option, or perhaps you just get overly confident, type something and press enter before considering the consequences of the command you’re about to execute… And then all you have is a kernel panic and one thought...

aard, (edited )
@aard@kyu.de avatar

killall typically sends SIGTERM by default. It accepts a single argument, the signal to send - so shutdown would call it once with SIGTERM, then with SIGKILL. killall is not meant to to be called interactively - which worked fine, until people who had their first contact with UNIX like systems on Linux started getting access to traditional UNIX systems.

It used to be common to discourage new Linux users from using killall interactively for exactly that reason. Just checked, there’s even a warning about that in the killall manpage on Linux.

aard,
@aard@kyu.de avatar

Back then I was testing modelines to see the maximum I could push to my 14" monitor. I then backed it with a 1200x1600 virtual screen.

My girlfriend got sick from watching me scrolling around and bought me a 19" display which could do that resolution - and ended up frustrated when I added a larger virtual screen.

aard,
@aard@kyu.de avatar

I’m using opensuse tumbleweed a lot - this summer I’ve found an installation not touched for 2 years. Was about to reinstall when I decided to give updating it a try. I needed to manually force in a few packages related to zypper, and make choices for conflicts in a bit over 20 packages - but much to my surprise the rest went smoothly.

aard,
@aard@kyu.de avatar

It shows a message which wastes valuable screen estate, especially on low resolution terminals, containing a message I have to read every single time because the keys are not in muscle memory, and never will because the bindings are stupid.

On systems I have control over the reaction to nano popping up is exiting, removing it, making sure the package system blocks reinstallation attempts, and go back to what I was initially doing in a sane editor.

aard,
@aard@kyu.de avatar

Also quite important to make sure we don’t have just a single strong x86 vendor - even though currently looking at price/performance you’d almost always go for AMD.

The time before ryzen was horrible - a 4-core-CPU was considered high end, and if you needed something more you needed to go for ridiculously overpriced Xeons. Similar for servers - you could get slightly higher core counts there, but when going for more than 8 cores it’d also get expensive very quickly.

Now we’re talking about 16 cores in high end notebook, and 64 cores in still reasonably priced pro workstations.

aard,
@aard@kyu.de avatar

It’s a similar thing with four leaf clovers - I never in my life found one, even during periods where I’ve been scanning every bit of green while hiking. But then we had a friend who isn’t really paying attention to her surroundings, and just randomly goes ‘oh, moment’, and picks up a four leave clover from a few metres away.

Seems my daughter is also developing that talent - last summer she picked up a few while playing outside.

What would be the best way for me to recover data from my old laptop's hard drive, which seems to have a bad superblock?

I got an external hard drive enclosure for the purpose of recovering some of the files from my old laptops hard drive. The hard drive and all of it’s partitions show up in both disks and gparted but it wont mount. When I tried to mount it manually, it gave the error message stating that it can’t read the superblock. I’ve...

aard,
@aard@kyu.de avatar

You can do all of that on the device - but you only get one shot. If you mess up that’s it - so no sensible person would try any form of data rescue directly on the device. Storage is cheap, if you don’t have sufficient space on your computer just get another external disk.

aard,
@aard@kyu.de avatar

Gentoo is useless for learning how things work. Back in the 00s when I still had time to hang out at events it was always quite ridiculous at what kind of basic stuff the gentoo crowd got stuck at - and with the tooling 15+ years more polished now I’d expect what is actually going on is way more hidden than back then.

If you do want to understand how things work just build a minimal system - either on spare hardware, or qemu/kvm. Don’t go with systemd, or other fat userland options - that just makes you compile a lot of dependencies not adding value for learning.

Use some lean init (or just write one yourself), and some lean shell.

Wayland-Proxy Load Balancer Helping Firefox Cope With Wayland Issues (www.phoronix.com)

Among the Firefox Wayland bugs, one of the top crash bugs is over a lost connection to a Wayland compositor. For dealing with it is to have a proxy between Firefox and the Wayland compositor to cache messages and prevent compositor message queue overflows.

aard, (edited )
@aard@kyu.de avatar

You’re describing Wayland running into issues due to overall high system load, and not been given enough scheduler time to accept messages?

edit: This issue? gitlab.freedesktop.org/wayland/wayland/-/…/159 - didn’t find anything else matching the description, and personally have never seen that, both on my low specs notebook or my workstation, which probably counts as higher spec.

aard,
@aard@kyu.de avatar

That sounds more like a compositor problem - typically a client should not have control over where windows are placed, and that X11 allowed that got heavily abused with negative impact on UI. Wayland fortunately fixed that, so it is now up to the compositor where to place windows. Those can send hints, but the compositor is free to ignore them.

In your situation your compositor should remember where to stick the windows.

aard,
@aard@kyu.de avatar

That was one of the reasons why I was watching pirated versions of the Amazon shows even when I was paying for prime.

aard,
@aard@kyu.de avatar

Yeah, things are getting to the point where just having a mobile device running Linux and using Waydroid for some useful Android applications is less painful than trying to make Android work.

aard,
@aard@kyu.de avatar

Problem is that it not really is “just a store”. By using the google store you get access to the google play APIs, which are upgraded separately from the device OS - which is sensible from a security perspective, but they also were created by google specifically for regaining control over what goes on on Android devices.

A lot of applications are needlessly tied to play APIs - either because that way is a bit easier, or just because google is good at marketing them, and the developer didn’t think twice about it. Some relatively basic APIs are part of google play - for example maps, which needlessly is tied to google maps. Unlike Android itself the play APIs are not opensource.

Yandex tried about a decade ago to re-implement the play APIs to keep such applications working without the play store, by utilizing other services providing the same functionality, and tried to get other companies to join them. I’ve visited the Yandex office in Saint Petersburg a few times to discuss that back then (just checked, most of that seems to have been 2014 - that year Yandex was sponsoring my Russian visa). The effort failed for various reasons, unfortunately - the big one being that doing this required reverse engineering API changes on every play update google was pushing to stay compatible. There’s the microG project around now, but it seems to be less ambitious than what Yandex was trying to do back then.

My point is, as long as at least the API for play services isn’t maintained in a way that allows full open source reimplementations - or better, google releases parts as open source where we can plug different backends in - “use a different store” is not really a possible solution for many.

aard,
@aard@kyu.de avatar

In IT contracting (at least the fields I’m around) it’s quite common that “being able to acquire new skills quickly” is one of the skills you get paid for, and the time needed for you to do that is accounted for in the project planning.

Spending a few days with Hyprland made me realize how awesome Gnome is

Don’t get me wrong. Hyprland is great. I like it a lot. It looks fresh, it’s easy to configure and the keybindings are super easy to implement, but it’s also very barebones. Most of the functionality expected from a DE come from external software. Be it a top bar, an app launcher, a notification daemon or anything else....

aard, (edited )
@aard@kyu.de avatar

Instead of rofi I’d recommend using anyrun.

I made a quick plugin to also run stuff from path, and am currently working on a proper ssh plugin for that - extending them is a bit more involved than the simple rofi/wofi scripts, but there’s a lot more things an anyrun plugin can do.

aard,
@aard@kyu.de avatar

I’m still angry at nvidia for buying their remains, and not doing anything useful with it.

3dfx had multi GPU support back then, it took quite a while afterwards until somebody else tried that.

aard,
@aard@kyu.de avatar

I’ve been using (or, in some cases, trying to use) that when it was brand new. Kernel side was relatively easy - but there was a lot of compiling custom versions of XFree86 trying to get acceleration working properly.

On the one hand a bit sad to see that kind of history I’ve experienced myself go - on the other hand, it’s probably been a decade since I’ve last used something without KMS, and the ease of use of modern KMS drivers is way ahead of all the older stuff.

aard,
@aard@kyu.de avatar

A few years before Ubuntu quite a few companies tried doing their own distributions. Back then it still was common to sell them in a proper software box - CDs or DVDs, manuals and some swag, at minimum stickers, but quite often also pins or some other stuff.

On exhibitions they’d often give away full boxes to get people to try - sometimes the current version, sometimes the last release. I still have a bunch of those in the garage - I think Corel (yes, the painting program guys) should be one of them.

aard,
@aard@kyu.de avatar

Installing 25 year old binaries on Linux is rather interesting - relevant for stuff like some of the old Loki ports. Problem is mostly that they’ve been written with kernel 2.2 in mind, which does have different behaviour for quite a few things - you generally can find old libc versions compatible with the binary, but those libc versions don’t necessarily play nice with the kernel.

There are some compatibility flags which made things work last time I checked - but not sure if that’s the case, and it definitely won’t work forever, given that 32bit x86 support is likely to be dropped eventually.

aard,
@aard@kyu.de avatar

There’s a lot of enterprise stuff that only ships as binaries. I had some fun in the late 00s trying to find the most recent distribution still shipping packages for egcs as that was the only compiler supported by the Lotus Domino SDK.

(For the younger ones here: There was some disagreement about gcc development, which resulted in the egcs fork. It got merged back into mainline gcc by he late 90s already, though)

At the time when the Loki ports happened it was a great thing - before that you pretty much had doom and quake available. Nowadays things are better with steam, but it’s quite likely that we’ll see some stuff break there in a few years as well, at least for older games.

aard,
@aard@kyu.de avatar

I assume you mean “lookup”, as import doesn’t really make much sense.

I’m currently using this with wofi, though I’ll eventually rewrite it as anyrun plugin, which provides a bit more control:


<span style="color:#323232;">#!/usr/bin/env python3
</span><span style="color:#323232;">from argparse import ArgumentParser
</span><span style="color:#323232;">import subprocess
</span><span style="color:#323232;">import json
</span><span style="color:#323232;">import os
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">ssh_config_file = "~/.ssh/config"
</span><span style="color:#323232;">ssh_known_hosts_file = "~/.ssh/known_hosts"
</span><span style="color:#323232;"> 
</span><span style="color:#323232;"># Returns a list of all hosts
</span><span style="color:#323232;">def get_hosts():
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    hosts = []
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    with open(os.path.expanduser(ssh_config_file)) as f:
</span><span style="color:#323232;">        content = f.readlines()
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    for line in content:
</span><span style="color:#323232;">        line = line.lstrip()
</span><span style="color:#323232;">        # Ignore wildcards
</span><span style="color:#323232;">        if line.startswith('Host ') and not '*' in line:
</span><span style="color:#323232;">            for host in line.split()[1:]:
</span><span style="color:#323232;">                hosts.append(host)
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    # Removes duplicate entries
</span><span style="color:#323232;">    hosts = sorted(set(hosts))
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    return hosts
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">def get_known_hosts():
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    hosts = []
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    with open(os.path.expanduser(ssh_known_hosts_file)) as f:
</span><span style="color:#323232;">        content = f.readlines()
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    for line in content:
</span><span style="color:#323232;">        line = line.lstrip()
</span><span style="color:#323232;">        host_entry = line.partition(" ")[0]
</span><span style="color:#323232;">        hosts.append(host_entry.partition(",")[0])
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    # Removes duplicate entries
</span><span style="color:#323232;">    hosts = sorted(set(hosts))
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    return hosts
</span><span style="color:#323232;"> 
</span><span style="color:#323232;"># Returns a newline seperated UFT-8 encoded string of all ssh hosts
</span><span style="color:#323232;">def parse_hosts(hosts):
</span><span style="color:#323232;">    return "n".join(hosts).encode("UTF-8")
</span><span style="color:#323232;"> 
</span><span style="color:#323232;"># Executes wofi with the given input string
</span><span style="color:#323232;">def show_wofi(command, hosts):
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    process = subprocess.Popen(command,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
</span><span style="color:#323232;">    ret = process.communicate(input=hosts)
</span><span style="color:#323232;">    host, rest = ret
</span><span style="color:#323232;">    return host
</span><span style="color:#323232;"> 
</span><span style="color:#323232;"># Switches the focus to the given id
</span><span style="color:#323232;">def ssh_to_host(host, terminal, ssh_command):
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    if "]:" in host:
</span><span style="color:#323232;">        host, port = host[1:].split("]:")
</span><span style="color:#323232;">        command = "{terminal} '{ssh_command} {host} -p {port}'".format(terminal=terminal, ssh_command=ssh_command, host=host, port=port)
</span><span style="color:#323232;">    else:
</span><span style="color:#323232;">        command = "{terminal} '{ssh_command} {host}'".format(terminal=terminal, ssh_command=ssh_command, host=host)
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    process = subprocess.Popen(command,shell=True)
</span><span style="color:#323232;"> 
</span><span style="color:#323232;"># Entry point
</span><span style="color:#323232;">if __name__ == "__main__":
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    parser = ArgumentParser(description="Wofi based ssh launcher")
</span><span style="color:#323232;">    parser.add_argument("terminal", help='Terminal command to use')
</span><span style="color:#323232;">    parser.add_argument("--ssh-command", dest='ssh_command', default='ssh', help='ssh command to use (default=ssh)')
</span><span style="color:#323232;">    parser.add_argument("--mode", dest='mode', default='known_hosts', help='where to read from (default=known_hosts)')
</span><span style="color:#323232;">    parser.add_argument("--command", default='wofi -p "SSH hosts: " -d -i --hide-scroll', help='launcher command to use')
</span><span style="color:#323232;">    args = parser.parse_args()
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    if (args.mode == "config"):
</span><span style="color:#323232;">        hosts = get_hosts()
</span><span style="color:#323232;">    elif (args.mode == "known_hosts"):
</span><span style="color:#323232;">        hosts = get_known_hosts()
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    parsed_hosts = parse_hosts(hosts)
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    selected = show_wofi(args.command, parsed_hosts)
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    selected_host = selected.decode('utf-8').rstrip()
</span><span style="color:#323232;"> 
</span><span style="color:#323232;">    if selected_host != "":
</span><span style="color:#323232;">        ssh_to_host(selected_host, args.terminal, args.ssh_command)
</span>
aard,
@aard@kyu.de avatar

You have a list of systems you’ve connected to in known_hosts, though. And the config file is easy enough to parse - throwing away the stuff you don’t care about - to expand on that list.

aard,
@aard@kyu.de avatar

There’s a lot of other stuff where Wayland improves the experience. Pretty much everything hotplug works to some extend on X, but it’s all stuff that got bolted on later. Hotplugging an input device with a custom keymap? You probably can get it working somewhat reliably by having udev triggers call your xmodmap scripts - or just use a Wayland compositor handling that.

Similar with xrandr - works a lot of the time nowadays, but still a compositor just dealing with that provides a nicer experience.

Plus it stops clients from doing stupid things - changing resolutions, moving windows around or messing up what is focused is also a thing of the past.

aard,
@aard@kyu.de avatar

especially if you have Nvidia

This is something that needs to be highlighted over and over again: Don’t buy nvidia if there’s ever a chance of running anything but Windows.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • localhost
  • All magazines
  • Loading…
    Loading the web debug toolbar…
    Attempt #