think tank forum

technology » *nix on T61

asemisldkfj's avatar
15 years ago
link
asemisldkfj
the law is no protection
I have this T61:

Intel® Core™2 Duo T8100 (2.10 GHz, 3MB L2, 800 MHz FSB)
14.1" WXGA (1280 X 800)
2GB PC2-5300 DDR2 SDRAM 667MHz SODIMM Memory
80GB, 5400RPM Serial ATA 2.5" Drive
DVD Recordable 8x Max Dual Layer Ultrabay Slim
Intel® Wireless WiFi Link 4965AG (supporting Centrino Pro)
Intel® Graphics Media Accelerator X3100



as far as *nix (I kind of hate this term but am sticking with it for consistency with the '*nix on x60s' thread) goes I have run OpenBSD 4.6-current, NetBSD (I forget what version), FreeBSD 7.0, and FreeBSD -current. in reverse order now...

FreeBSD -current gave me crap about my formerly GPT-partitioned disk, you have to use a virtual wireless interface to support the wifi card, and the display doesn't come back when you resume from suspend/sleep (I forget which I tried exactly). my ridiculous amount of complaints about FreeBSD that aren't necessarily non-functionality are detailed here in the thinkpads, part ii thread.

FreeBSD 7.0 doesn't support the wifi card.

NetBSD supports wifi, but I hate pkgsrc, the docs, and the overall feel of it.

OpenBSD has been awesome. no sleep/suspend support, but brightness keys work. volume keys work. xorg works. all of this without any configuration. the onboard NIC works too. wifi is supported (and OpenBSD has WPA support now which is crucial; it's also implemented more simply than with wpa-supplicant).

my only wish is that I knew how to disable tap-to-click for the touchpad; I hate it.

I've thought about trying Linux but honestly I have had bad experiences with the whole kernel + userland tools model and if I want support for things like Flash at the expense of having a clean-feeling system I would just run FreeBSD again.

what do you run?
asemisldkfj's avatar
15 years ago
link
asemisldkfj
the law is no protection
additionally, I am really loving dwm right now.

this is my .xsession/status script:

xsetroot -solid black &
while true
do
        apm_charging_status=`/usr/sbin/apm -a`
        if [ $apm_charging_status = 1 ]; then
                charging_status="+"
        else
                charging_status="-"
        fi
        xsetroot -name "volume: $(/usr/bin/mixerctl -n outputs.master | /usr/bin/sed 's/^[0-9]*,//g') | battery: $(/usr/sbin/apm -l)% $charging_status | $(/bin/date "+%A, %B %e, %Y %r")"
        sleep 1
done | dwm


I still haven't figured out the ideal way of quitting/restarting dwm and also killing the while loop that .xsession starts. if you put the dwm command on a separate line and put the while loop in the background with & then when you quit dwm via mod+shift+q the while loop stays running. if you have your .xsession set up like I do and you do mod+shift+q then X doesn't die (or restart if you're using xdm). I think I just need to map a keyboard shortcut to a command that will kill dwm's process or something, but this isn't a huge issue right now since I can just do mod+shift+q and then ctrl+alt+backspace.

also relevant, here is my config.h:

/* See LICENSE file for copyright and license details. */

/* appearance */
// static const char font[]            = "-*-*-medium-*-*-*-14-*-*-*-*-*-*-*";
static const char font[]            = "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#222222";
static const char normbgcolor[]     = "#222222";
static const char normfgcolor[]     = "#cccccc";
static const char selbordercolor[]  = "#eeeeee";
static const char selbgcolor[]      = "#444444";
static const char selfgcolor[]      = "#ffffff";
/*static const char normbordercolor[] = "#0044aa";
static const char normbgcolor[]     = "#222222";
static const char normfgcolor[]     = "#bbbbbb";
static const char selbordercolor[]  = "#dddddd";
static const char selbgcolor[]      = "#0044aa";
static const char selfgcolor[]      = "#eeeeee"; */
static const unsigned int borderpx  = 1;        /* border pixel of windows */
static const unsigned int snap      = 32;       /* snap pixel */
static const Bool showbar           = True;     /* False means no bar */
static const Bool topbar            = True;     /* False means bottom bar */

/* tagging */
static const char *tags[] = { "1", "2", "3", "4" };

static const Rule rules[] = {
    /* class      instance    title       tags mask     isfloating   monitor */
    { "Gimp",     NULL,       NULL,       0,            True,        -1 },
    { "Firefox",  NULL,       NULL,       1 << 1,       False,       -1 },
    { "MPlayer",  NULL,       NULL,       0,            True,        -1 },
};

/* layout(s) */
static const float mfact      = 0.6; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = True; /* True means respect size hints in tiled resizals */

static const Layout layouts[] = {
    /* symbol     arrange function */
    { "[]=",      tile },    /* first entry is default */
    { "><>",      NULL },    /* no layout function means floating behavior */
    { "[M]",      monocle },
};

/* key definitions */
#define MODKEY Mod4Mask
#define TAGKEYS(KEY,TAG) \
    { MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
    { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
    { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }

/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
static const char *termcmd[]  = { "xterm", NULL };

static Key keys[] = {
    /* modifier                     key        function        argument */
    { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
    { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
    { MODKEY,                       XK_b,      togglebar,      {0} },
    { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
    { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
    { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
    { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
    { MODKEY,                       XK_Return, zoom,           {0} },
    { MODKEY,                       XK_Tab,    view,           {0} },
    { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
    { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
    { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
    { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
    { MODKEY,                       XK_space,  setlayout,      {0} },
    { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
    { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
    { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
    { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
    { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
    { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
    { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
    TAGKEYS(                        XK_1,                      0)
    TAGKEYS(                        XK_2,                      1)
    TAGKEYS(                        XK_3,                      2)
    TAGKEYS(                        XK_4,                      3)
    TAGKEYS(                        XK_5,                      4)
    TAGKEYS(                        XK_6,                      5)
    TAGKEYS(                        XK_7,                      6)
    TAGKEYS(                        XK_8,                      7)
    TAGKEYS(                        XK_9,                      8)
    { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
};

/* button definitions */
/* click can be ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
static Button buttons[] = {
    /* click                event mask      button          function        argument */
    { ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
    { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
    { ClkWinTitle,          0,              Button2,        zoom,           {0} },
    { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
    { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
    { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
    { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
    { ClkTagBar,            0,              Button1,        view,           {0} },
    { ClkTagBar,            0,              Button3,        toggleview,     {0} },
    { ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
    { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
};


and here's a pretty boring screenshot with a couple of local xterms and irssi in a tmux session on a remote host.
asemisldkfj's avatar
15 years ago
link
asemisldkfj
the law is no protection
one more thing I would like to figure out is how to get the volume in the status bar to display as a percentage or something instead of being 0-255.
lucas's avatar
15 years ago
r1, link
lucas
i ❤ demo
> config.h

into what was it linked during compile?
asemisldkfj's avatar
15 years ago
link
asemisldkfj
the law is no protection
dwm.c
lucas's avatar
15 years ago
link
lucas
i ❤ demo
oh. thanks :)
Carpetsmoker's avatar
15 years ago
link
Carpetsmoker
Martin
[quote]my only wish is that I knew how to disable tap-to-click for the touchpad; I hate it.[/quote]

Did you try booting to Windows, setting the Synaptics settings, and going back to OpenBSD? Sometimes settings are saved to the device ...

[quote]one more thing I would like to figure out is how to get the volume in the status bar to display as a percentage or something instead of being 0-255.[/quote]

Well, it is easy to convert to percentage:

$level / 255 * 100

You can use dc, but I can't figure out how to do decimal numbers (It only replies with whole integers)

How's your T61 video speed on OpenBSD btw? It's pretty slow on mine, for example when I switch workspaces it's just slow in redrawing all the windows (Even xterms)...
asemisldkfj's avatar
15 years ago
link
asemisldkfj
the law is no protection
I don't have Windows anymore :/. that would have been a good idea to try, but I think I actually had it disabled in Windows before doing an OpenBSD install, so that disproves that theory.

I tried to do some command line arithmetic stuff a while ago and forget why I gave up. I think I was going to need to install something from ports. oh, no, I remember the problem. I installed something from ports that worked great (forget what it was by now) but the way it output the result was with like an invisible line break in it or something else that messed with the status bar's formatting. it was odd. I'll look into it again soon.

I've actually noticed the same thing with the video. I've been meaning to take a look at the xorg logs to see if there's anything I might be able to do. sometimes not having an xorg.conf sucks when there's no other obvious way to change a setting!
Carpetsmoker's avatar
15 years ago
link
Carpetsmoker
Martin
Here's the command for volume:

$(dc -e "2k $(/usr/bin/mixerctl -n outputs.master | /usr/bin/sed 's/^[0-9]*,//g') 255 / 100 * p")