1. A new drm entry (nvidia_card) is added on every iteration of osspec_probe(), because no check is done to see if the entry is already there. 2. storage.removable.media_available and storage.removable.media_size are set only for optical drives, while they should be set also for hotpluggable drives. 3. hal-info adds many useful definitions to the HAL device list, but many users don't know about the port. Fix: 1. Add a check to avoid duplicating the entry. 2. Set the properties for any storage device, as the Linux backend does. It's not wrong to do that only for optical drives, as they are the only true "removable" devices (along with tape and floppy drives), as USB sticks should only be marked as "hotpluggable", but since our backend does the same wrong assumption as the Linux one, it's better to pursue that road (it's a bit late to change). This means that the properties will also be set for non-hotpluggable devices (hard disks), but that's not a problem, as the properties should not be checked if storage.removable is false. This also mimics Linux backend behaviour, and, to be fair, HAL spec is not at all complete in the definition of the properties. 3. Adding a dependency on hal-info ensures that everyone gets the best possible "HAL experience" (sounds a bit too much :). For instance, I now have my iPod detected as such in KDE, with a nice icon shown in place of the plain USB stick one. Patch attached with submission follows: How-To-Repeat: 1. Grep `lshal` for "nvidia_card" (on systems mounting an Nvidia, of course): there are multiple entries, with no differences. Systems with removable devices will have many of them, while other systems could have fewer. One is enough, though. 2. Check if those properties are set for hotpluggable devices.
Responsible Changed From-To: freebsd-ports-bugs->gnome Over to maintainer (via the GNATS Auto Assign Tool)
Author: kwm Date: Sat Sep 29 18:17:59 2012 New Revision: 305045 URL: http://svn.freebsd.org/changeset/ports/305045 Log: Make sure /var is populated correctly before hal is started, like dbus does already in its rc.d script. [1] Don't list entries twice, set some more details about storage devices like the linux backend does. [2] PR: ports/171568 [1] PR: ports/171727 [2] Submitted by: Norbert Koch <nkoch@demig.de> [1], avilla@ [2] Reviewed by: marcus@ Added: head/sysutils/hal/files/patch-hald_freebsd_hf-drm.c (contents, props changed) head/sysutils/hal/files/patch-hald_freebsd_probing_probe-storage.c (contents, props changed) Modified: head/sysutils/hal/Makefile (contents, props changed) head/sysutils/hal/files/hald.in (contents, props changed) Modified: head/sysutils/hal/Makefile ============================================================================== --- head/sysutils/hal/Makefile Sat Sep 29 18:10:12 2012 (r305044) +++ head/sysutils/hal/Makefile Sat Sep 29 18:17:59 2012 (r305045) @@ -8,7 +8,7 @@ PORTNAME= hal DISTVERSION= 0.5.14 -PORTREVISION= 19 +PORTREVISION= 20 CATEGORIES= sysutils MASTER_SITES= http://hal.freedesktop.org/releases/ Modified: head/sysutils/hal/files/hald.in ============================================================================== --- head/sysutils/hal/files/hald.in Sat Sep 29 18:10:12 2012 (r305044) +++ head/sysutils/hal/files/hald.in Sat Sep 29 18:17:59 2012 (r305045) @@ -41,6 +41,43 @@ local_force_depend() return 0 } +init_var_policykit() +{ + local USER=polkit + local GROUP=${USER} + local PREFIX=/usr/local + + /usr/bin/install -d -o root -m 0770 -g ${GROUP} /var/run/PolicyKit + /usr/bin/install -d -o root -m 0770 -g ${GROUP} /var/lib/PolicyKit + /usr/bin/install -d -o ${USER} -m 0755 -g wheel /var/lib/PolicyKit-public + /bin/mkdir -p /var/lib/misc + /usr/bin/touch -f /var/lib/misc/PolicyKit.reload + /usr/sbin/chown ${USER}:${GROUP} /var/lib/misc/PolicyKit.reload + /bin/chmod 0664 /var/lib/misc/PolicyKit.reload +} + +init_var_polkit() +{ + mkdir -p /var/lib/polkit-1/localauthority + for i in 10-vendor.d 20-org.d 30-site.d 50-local.d 90-mandatory.d + do + mkdir -p /var/lib/polkit-1/localauthority/${i} + done + chmod 0700 /var/lib/polkit-1 +} + +init_var_hal() +{ + local USER=haldaemon + local GROUP=${USER} + + /usr/bin/install -d -o ${USER} -g ${GROUP} /var/run/hald + /usr/bin/install -d -o ${USER} -g ${GROUP} /var/cache/hald + /usr/bin/install -d -o ${USER} -g ${GROUP} /var/lib/hal + /usr/local/bin/polkit-auth --user ${USER} --grant \ + org.freedesktop.policykit.read 1> /dev/null 2>&1 +} + hald_precmd() { if ! checkyesno dbus_enable @@ -48,6 +85,10 @@ hald_precmd() local_force_depend dbus || return 1 fi + init_var_policykit + init_var_polkit + init_var_hal + chmod 0755 /var/cache mkdir -p $(dirname $pidfile) Added: head/sysutils/hal/files/patch-hald_freebsd_hf-drm.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sysutils/hal/files/patch-hald_freebsd_hf-drm.c Sat Sep 29 18:17:59 2012 (r305045) @@ -0,0 +1,15 @@ +--- hald/freebsd/hf-drm.c.orig 2008-08-10 15:50:10.000000000 +0200 ++++ hald/freebsd/hf-drm.c 2012-09-27 12:04:28.000000000 +0200 +@@ -234,6 +234,12 @@ + { + HalDevice *parent = HAL_DEVICE(l->data); + ++ if (hf_device_store_match(hald_get_gdl(), ++ "info.parent", HAL_PROPERTY_TYPE_STRING, hal_device_get_udi(parent), ++ "info.subsystem", HAL_PROPERTY_TYPE_STRING, "drm", ++ NULL)) ++ continue; ++ + if (! hal_device_property_get_bool(parent, "info.ignore")) + { + Card *card; Added: head/sysutils/hal/files/patch-hald_freebsd_probing_probe-storage.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sysutils/hal/files/patch-hald_freebsd_probing_probe-storage.c Sat Sep 29 18:17:59 2012 (r305045) @@ -0,0 +1,39 @@ +--- hald/freebsd/probing/probe-storage.c.orig 2009-08-24 14:42:29.000000000 +0200 ++++ hald/freebsd/probing/probe-storage.c 2012-09-27 12:03:02.000000000 +0200 +@@ -236,7 +236,27 @@ + + hfp_cdrom_free(cdrom); + } +- else if (! has_children) /* by definition, if it has children it has no fs */ ++ else ++ { ++ int fd; ++ off_t size; ++ ++ fd = open(device_file, O_RDONLY | O_NONBLOCK); ++ if (fd > -1) ++ { ++ libhal_device_set_property_bool(hfp_ctx, hfp_udi, "storage.removable.media_available", TRUE, &hfp_error); ++ if (ioctl (fd, DIOCGMEDIASIZE, &size) == 0) ++ { ++ libhal_device_set_property_uint64(hfp_ctx, hfp_udi, "storage.removable.media_size", size, &hfp_error); ++ } ++ close(fd); ++ } ++ else ++ { ++ libhal_device_set_property_bool(hfp_ctx, hfp_udi, "storage.removable.media_available", FALSE, &hfp_error); ++ } ++ ++ if (! has_children) /* by definition, if it has children it has no fs */ + { + struct volume_id *vid; + +@@ -249,6 +269,7 @@ + + volume_id_close(vid); + } ++ } + + end: + return ret; _______________________________________________ svn-ports-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-ports-all To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
State Changed From-To: open->closed Committed thanks!
Haven't you forgot to commit the RUN_DEPENDS+=hal-info hunk?
On Mon, Oct 8, 2012 at 7:48 AM, arrowdodger <6yearold@gmail.com> wrote: > Haven't you forgot to commit the RUN_DEPENDS+=hal-info hunk? hal-info depends on hal. That was quite a stupid mistake of mine. :) -- Alberto Villa, FreeBSD committer <avilla@FreeBSD.org> http://people.FreeBSD.org/~avilla
Ah, right. Maybe it should be mentioned in hal's pkg-message then? On Mon, Oct 8, 2012 at 11:40 AM, Alberto Villa <avilla@freebsd.org> wrote: > On Mon, Oct 8, 2012 at 7:48 AM, arrowdodger <6yearold@gmail.com> wrote: > > Haven't you forgot to commit the RUN_DEPENDS+=hal-info hunk? > > hal-info depends on hal. That was quite a stupid mistake of mine. :) > -- > Alberto Villa, FreeBSD committer <avilla@FreeBSD.org> > http://people.FreeBSD.org/~avilla >