Language Selection

English French German Italian Portuguese Spanish

Fluxbox In-Depth: Mad Customization And Other Tips

Filed under
Fluxbox

When I was first preparing to switch to Linux many years ago, I went into research mode and looked around the net a bit. At the time, part of the allure of Linux were the crazy cool desktops people had. After I switched I tried Gnome, then KDE, and was depressed at how uncool and *dozelike they were. Eventually, I discovered that all those amazing desktops were the result of Fluxbox (or the other *box forks). I switched immediately.

To my surprise, I found that not only was I able to get a really cool appearance, but Fluxbox made all the things I wanted out of a window manager, and some I didn’t know I wanted, simple. It turned out that I was not the only user to have noticed those operating system limitations and failings I’d been grumbling about for years, particularly with *doze. The Fluxbox crew apparently knew my pain and had gone about addressing all of those complaints.

Fluxbox, like many other window managers these days, allows for having multiple desktops. In Fluxbox these are called “Workspaces.” I usually use five workspaces, each devoted to separate purposes, and thus, each have specific applications. Let me describe them for you, but first let me note that all my workspaces are two monitors wide despite some images being cropped to show only the primary left-hand monitor.

rest here




More in Tux Machines

Try the GNOME Nightly VM images with GNOME Boxes

It was a long time overdue but we now have bootable VM images for GNOME again. These VMs are good for testing and documenting new features before they reach distros. To provide the best experience in terms of performance and host-guest integration, we landed in BoxesDevel (Nightly GNOME Boxes) an option to create GNOME VMs with the correct device drivers and configurations assigned to it. You know…the Boxes way™. Read more

Red Hat: libinput, backports, edge computing, survey and more

  • Peter Hutterer: A tale of missing touches

    libinput 1.15.1 had a new feature: it matched the expected touch count with the one actually seen as opposed to the one advertised by the kernel. That is good news for ALPS devices whose kernel driver lies about their capabilities because these days who doesn't. However, in some cases that feature had the side-effect of reducing the touch count to zero - meaning libinput would ignore any touch. This caused a slight UX degradation. After a bit of debugging and/or cursing, the issue was identified as a libevdev issue, specifically - the way libevdev replays events after a SYN_DROPPED event. And after several days of fixing things, adding stuff to the CI and adding meson support for libevdev so the CI can actually run a few useful things, it's time for a blog post to brain-dump and possibly entertain the occasional reader such as you are. Congratulations, I guess. The Linux kernel's evdev protocol is a serial protocol where all events have a type, a code and a value. Events are grouped by EV_SYN.SYN_REPORT events, so the event type is EV_SYN (0), the event code is SYN_REPORT (also 0). The value is usually (but not always), you guessed it, zero. A SYN_REPORT signals that the current event sequence (also called a "frame") is to be interpreted as one hardware event [0].

  • What is backporting, and how does it apply to RHEL and other Red Hat products?

    Version numbers are important, but aren't always what they seem at first glance. Red Hat, for example, often backports updates to the software we ship in Red Hat Enterprise Linux (RHEL) to maintain the version that we shipped. This is a post to follow to Jean-Sébastien Tougne’s post on finding the latest available kernel. Jean-Sébastien’s article was responding to a question on the Red Hat Learning Community, where the poster was seeking the latest version of the kernel for Red Hat Enterprise Linux. That prompted me to write an article that went deeper into the nuance and strategy the Red Hat Enterprise Linux team employs for this to be magically delicious for administrators.

  • The edge is open: Why scale-out computing doesn’t exist without open hybrid cloud

    The past year has seen the rise of applications that push enterprise IT to the (literal) edge, from using autonomous vehicles guided by artificial intelligence (AI) to vast sensor networks that rely on 5G for instant connectivity and emergency reaction times. Whether it's the Internet-of-Things (IoT), fog computing or edge computing, the intent is to bring computing resources like processing power and storage closer to the end user or data source to improve the ability to scale, responsiveness and the overall service experience. We can look at the edge as the newest IT footprint, becoming an extension of the data center just like bare-metal, virtual environments, private cloud and public cloud. In a sense, edge computing is a summation of the other four footprints, blending pieces from each to create infrastructure aimed at tackling specific customer demands that traditional IT models cannot address.

  • Enterprise open source software is growing within innovative companies

    Red Hat has been at the forefront of the global open source discussion, fighting for software freedom in the U.S Supreme Court, and offering free tech products for cloud infrastructure, automation, AI, and much more. After conducting research and interviewing IT leaders from around the world, Red Hat released a report examining the state of enterprise open source in 2020. 950 IT leaders, unaware that Red Hat was the research sponsor, were surveyed about their practices and opinions on enterprise open source software.

  • Multicluster Management and GitOps Workshop

    There’s so much more to come. In the next few weeks, we’ll dive deeper into customer ideas and finish the design thinking process by producing designs, prototyping them, and finally testing their validity. We also want you to join us. To help influence the future of OpenShift, sign up to be notified about research participation opportunities or provide feedback on your experience by filling out this brief survey. If you’d like to attend the next workshop, keep an eye on the OpenShift Commons calendar for upcoming events. Feel free to reach out by email if you have any questions.

Linux Community: Stop Doing This To Windows 10 And MacOS Users

Unpopular opinion time: dual-booting Windows and Linux on your PC is actually great. I do it and I encourage it. Now, if you’ve read my articles here for the last 18 months or so, this statement may seem shocking. To some Linux users, it may come off as downright sacrilegious. I get it. “Prominent Forbes tech writer ditches Windows (1, 2), starts covering Linux full-time while touting all the benefits Linux has over Windows 10, produces a Linux podcast and YouTube channel, then says using Windows is fine?” Read more

Python Programming

  • Introducing our Jinja2 cheat sheet

    Jinja2 is a templating language for Python. While it got its start on the web for use with the Flask framework, it is popular in many other places. Both Flask and Pelican use it to template HTML pages, allowing seperation between style and content. Configuration management frameworks, like Ansible and SaltStack, use it to parametrize their configurations (Ansible playbooks or Salt state files, respectively). This allows the configuration files to take into consideration local machine parameters, for example. The Cookiecutter framework uses it to define its input templates, so that files that need the name of the project or the name of the maintainer can be parametrized. Jinja2 is used in many Python projects because it is both web-framework-agnostic and language-agnostic. This means that, for many Python projects in need of a template language, Jinja2's easy API and accessible template-designer documentation is an easy choice. Additionally, its popularity is its own advantage: for a project that needs a tempate language, using Jinja2 means being able to point to the wealth of documentation on writing templates. This makes Jinja2 a great choice for home-grown, internal project.

  • Forks and Threats

    What is a threat? From a game-theoretical perspective, a threat is an attempt to get a better result by saying: "if you do not give me this result, I will do something that is bad for both of us". Note that it has to be bad for both sides: if it is good for the threatening side, they would do it anyway. While if it is good for the threatened side, it is not a threat. Threats rely on credibility and reputation: the threatening side has to be believed for the threat to be useful. One way to gain that reputation is to follow up on threats, and have that be a matter of public record. This means that the threatening side needs to take into account that they might have to act on the threat, thereby doing something against their own interests. This leads to the concept of a "credible" or "proportionate" threat. For most of our analysis, we will use the example of a teacher union striking. Similar analysis can be applied to nuclear war, or other cases. People mostly have positive feelings for teachers, and when teacher unions negotiate, they want to take advantage of those feelings. However, the one thing that leads people to be annoyed with teachers is a strike: this causes large amounts of unplanned scheduling crisis in people's lives. In our example, a teacher union striking over, say, a minor salary raise disagreement is not credible: the potential harm is small, while the strike will significantly harm the teachers' image.

  • Python 101 2nd Edition Fully Funded + Stretch Goals

    The second edition of my book, Python 101, has been successfully funded on Kickstarter. As is tradition, I have added a couple of stretch goals for adding more content to this already hefty book.

  • List Comprehensions in Python

    List comprehensions are often used in Python to write single line statements that create a new list or dictionary by looping over an iterable object. This article will explain how to use list comprehensions in Python, starting with a basic explanation of how for loops work in Python. For Loop in Python A for loop statement in Python sequentially iterates over members of any object, list, string etc. Compared with other programming languages, its syntax is much cleaner and doesn’t require manually defining iteration steps and starting iteration. Though there are ways to make its behavior the same as other programming languages (won’t be covered in this article). You can also exercise some control over for loops by using statements like continue, break, pass etc.

  • Getting Started Testing with pytest

    This talk has been through a few iterations. In 2011, I gave a presentation at Boston Python about Getting Started Testing, based on the standard library unittest module. In 2014, I updated it and presented it at PyCon. Now I’ve updated it again, and will be presenting it at Boston Python. The latest edition, Getting Started Testing: pytest edition, uses pytest throughout. It’s a little long for one evening of talking, but I really wanted to cover the material in it. I wanted to touch on not just the mechanics of testing, but the philosophy and central challenges as well.

  • Learn To Code By Playing These Games

    Apart from an ambition to become a programmer and have an interesting well-paid job, there are plenty of reasons to learn coding even for those who see themselves in other professions. Programming can be helpful in many areas. It develops a structured and creative approach to problem-solving. If you know how to code, you also know how to break a problem down to smaller tasks with specific actions and measurable results. Your way of thinking becomes more logical and organized. Coding broadens your mind, so you start to see problems in the light of solutions. And of course, it teaches to be patient. Logic, problem-solving, persistence: sounds like a great set of skills for almost any professional.

  • The Best Android Apps for Learning How to Code

    As a senior software developer, I’m often asked for advice on learning programming. Since I believe that the tech market always benefits from having more high-quality developers, I’m happy to share tips and hacks that helped me become a better software engineer. However, as soon as I say: “Read this and that book, check out this reference guide. Taking these courses is a must, and don’t forget to be scanning through community forums all the time,” I see people’s enthusiasm fade away until they hit me with “I don’t have time to do all that.” Then they leave. Here’s the thing I’d love to state for the record — learning programming is not about making time. It’s about consistency. Since the market constantly changes and evolves, a developer who devotes 30 minutes a day to education is more flexible and has a better chance of adapting to new trends than a CS graduate who hasn’t learn a new program since getting out of college.